0% found this document useful (1 vote)
464 views25 pages

Greibach Normal Form

The document describes the process of converting a context-free grammar from Chomsky normal form to Greibach normal form. The conversion occurs in two steps: 1) Eliminate direct left recursion and enforce variable ordering to create an intermediate grammar. 2) Transform the intermediate grammar rules to start with terminals, using the A->uBv transformation, resulting in the Greibach normal form. An example demonstrates applying the two-step process to fully convert a sample grammar.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (1 vote)
464 views25 pages

Greibach Normal Form

The document describes the process of converting a context-free grammar from Chomsky normal form to Greibach normal form. The conversion occurs in two steps: 1) Eliminate direct left recursion and enforce variable ordering to create an intermediate grammar. 2) Transform the intermediate grammar rules to start with terminals, using the A->uBv transformation, resulting in the Greibach normal form. An example demonstrates applying the two-step process to fully convert a sample grammar.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 25

Greibach Normal Form

Conversion of a Chomsky normal form grammar to Greibach normal form

Definition
A CFG is in Greibach normal form if each rule has one these forms:
i. A aA1A2An ii. A a iii. S where a and Ai V {S} for i = 1, 2,, n

Definition
A CFG is in Chomsky normal form if each rule has one these forms:
i. A BC ii. A a iii. S where B, C V {S}

Conversion
Convert from Chomsky to Greibach in two steps: 1. From Chomsky to intermediate grammar
a. Eliminate direct left recursion b. Use A uBv rules transformations to improve references (explained later)

2. From intermediate grammar into Greibach

Eliminate direct left recursion

Before
A Aa | b

After
A bZ | b Z aZ | a

Remove the rule with direct left recursion, and create a new one with recursion on the right

Eliminate direct left recursion

Before
A Aa | Ab | b | c

After
A bZ | cZ | b | c Z aZ | bZ | a | b

Remove the rules with direct left recursion, and create new ones with recursion on the right

Eliminate direct left recursion


Before
A AB | BA | a Bb|c

After
A BAZ | aZ | BA | a Z BZ | B Bb|c

Transform A uBv rules


Before
A uBb B w1 | w1 || wn

After
Add A uw1b | uw1b || uwnb Delete A uBb

Conversion: Step 1
Goal: construct intermediate grammar in this format
i. A aw ii. A Bw iii. S where w V* and B comes after A

Conversion: Step 1
Assign a number to all variables starting with S, which gets 1 Transform each rule following the order according to given number from lowest to highest
Eliminate direct left recursion If RHS of rule starts with variable with lower order, apply A uBb transformation to fix it

Conversion: Step 2
Goal: construct Greibach grammar out of intermediate grammar from step 1 Fix A Bw rules into A aw format
After step 1, last original variable should have all its rules starting with a terminal Working from bottom to top, fix all original variables using A uBb transformation technique, so all rules become A aw

Fix introduced recursive rules same way

Conversion Example
Convert the following grammar from Chomsky normal form, into Greibach normal form
1. 2. 3. 4. S AB | A AB | CB | a B AB | b C AC | c

Conversion Strategy
Goal: transform all rules which RHS does not start with a terminal Apply two steps conversion Work rules in sequence, eliminating direct left recursion, and enforcing variable reference to higher given number Fix all original rules, then new ones

Step 1: S rules
Starting with S since it has a value to of 1 S AB | S rules comply with two required conditions
There is no direct left recursion Referenced rules A and B have a given number higher than 1. A corresponds to 2 and B to 3.

Step 1: A rules
A AB | CB | a Direct left recursive rule A AB needs to be fixed. Other A rules are fine Apply direct left recursion transformation
A CBR1 | aR1 | CB | a R1 BR1 | B

Step 1: B rules
B AB | b B AB rule needs to be fixed since B corresponds to 3 and A to 2. B rules can only have on their RHS variables with number equal or higher. Use A uBb transformation technique B CBR1B | aR1B | CBB | aB | b

Step 1: C rules
C AC | c C AC rule needs to be fixed since C corresponds to 4 and A to 2. Use same A uBb transformation technique C CBR1C | aR1C | CBC | aC | c Now variable references are fine according to given number, but we introduced direct left recursion in two rules

Step 1: C rules
C CBR1C | aR1C | CBC | aC | c Eliminate direct left recursion
C aR1CR2 | aCR2 | cR2 | aR1C | aC | c R2 BR1CR2 | BCR2 | BR1C | BC

Step 1: Intermediate grammar


S AB | A CBR1 | aR1 | CB | a B CBR1B | aR1B | CBB | aB | b C aR1CR2 | aCR2 | cR2 | aR1C | aC | c R1 BR1 | B R2 BR1CR2 | BCR2 | BR1C | BC

Step 2: Fix starting symbol


Rules S, A, B and C dont have direct left recursion, and RHS variables are of higher number All C rules start with terminal symbol Proceed to fix rules B, A and S in bottomup order, so they start with terminal symbol. Use A uBb transformation technique

Step 2: Fixing B rules


Before
B CBR1B | aR1B | CBB | aB | b

After
B aR1B | aB | b B aR1CR2BR1B | aCR2BR1B | cR2BR1B | aR1CBR1B | aCBR1B | cBR1B B aR1CR2BB | aCR2BB | cR2BB | aR1CBB | aCBB | cBB

Step 2: Fixing A rules


Before
A CBR1 | aR1 | CB | a

After
A aR1 | a A aR1CR2BR1 | aCR2BR1 | cR2BR1 | aR1CBR1 | aCBR1 | cBR1 A aR1CR2B | aCR2B | cR2B | aR1CB | aCB | cB

Step 2: Fixing S rules


Before
S AB |

After
S S aR1B | aB S aR1CR2BR1B | aCR2BR1B | cR2BR1B | aR1CBR1B | aCBR1B | cBR1B S aR1CR2BB | aCR2BB | cR2BB | aR1CBB | aCBB | cBB

Step 2: Complete conversion


All original rules S, A, B and C are fully converted now New recursive rules need to be converted next Use same A uBb transformation technique replacing starting variable B
R1 BR1 | B R2 BR1CR2 | BCR2 | BR1C | BC

Conclusions
After conversion, since B has 15 rules, and R1 references B twice, R1 ends with 30 rules Similar for R2 which references B four times. Therefore, R2 ends with 60 rules All rules start with a terminal symbol (with the exception of S ) Parsing algorithms top-down or bottom-up would complete on a grammar converted to Greibach normal form

You might also like