You are on page 1of 36

Simplifications of

Context-Free Grammars
I. Nullable Variables(-productions)

II. Unit-Productions

III. Useless Productions

I. Normal Forms

I. Chomsky Normal Form(CNF)

II. Greibach Normal Form(GNF)

1
1. Unit-Productions

Unit Production: A B
(a single variable in both sides)

Removing Unit Productions


Observation:
A A
Is removed immediately

2
Example Grammar:

S  aA
Aa
A B
BA
B  bb

3
S  aA
S  aA | aB
Aa
Substitute Aa
A B A B B  A| B
BA
B  bb
B  bb

4
S  aA | aB S  aA | aB
Aa Remove Aa
B  A| B BB BA
B  bb B  bb

5
S  aA | aB
S  aA | aB | aA
Aa Substitute
BA Aa
BA
B  bb
B  bb

6
Remove repeated productions

Final grammar
S  aA | aB | aA S  aA | aB
Aa Aa
B  bb B  bb

7
2. Useless Productions
S  aSb
S 
SA
A  aA Useless Production

Some derivations never terminate...

S  A  aA  aaA    aa aA  
8
In general:

if S    xAy    w

contains only terminals w L(G )

then variable A is useful

otherwise, variable A is useless

9
Removing Useless Productions
Example Grammar:

S  aS | A | C
Aa
B  aa
C  aCb

10
First: find all variables that can produce
strings with only terminals

S  aS | A | C Round 1: { A, B}
Aa SA
B  aa
C  aCb Round 2: { A, B, S }

11
Keep only the variables
that produce terminal symbols: { A, B, S }
(the rest variables are useless)

S  aS | A | C
Aa S  aS | A
B  aa Aa
C  aCb B  aa
Remove useless productions
12
Second: Find all variables
reachable from S

Use a Dependency Graph

S  aS | A
Aa S A B
B  aa not
reachable

13
Keep only the variables
reachable from S
(the rest variables are useless)

Final Grammar
S  aS | A
S  aS | A
Aa
Aa
B  aa

Remove useless productions

14
Another grammar:

SA
A  aA
A
B  bA Useless Production
Not reachable from S

15
A production A  x is useless
if any of its variables is useless

S  aSb
S  Productions
Variables SA useless
useless A  aA useless
useless B  C useless

useless CD useless


16
3. Nullable Variables

  production : A

Nullable Variable: A 


17
Removing Nullable Variables

Example Grammar:

S  aMb
M  aMb
M 

Nullable variable

18
Final Grammar

S  aMb
S  aMb
Substitute S  ab
M  aMb M 
M  aMb
M 
M  ab

19
Removing All

Step 1: Remove Nullable Variables

Step 2: Remove Unit-Productions

Step 3: Remove Useless Variables

20
Normal Forms
for
Context-free Grammars

21
Chomsky Normal Form

A  BC or Aa

variable variable terminal


22
Examples:

S  AS S  AS
S a S  AAS
A  SA A  SA
Ab A  aa
Chomsky Not Chomsky
Normal Form Normal Form

23
Convertion to Chomsky Normal Form

Example: S  ABa
A  aab
B  Ac

Not Chomsky
Normal Form

24
Introduce variables for terminals: Ta , Tb , Tc

S  ABTa
S  ABa A  TaTaTb
A  aab B  ATc
B  Ac Ta  a
Tb  b
Tc  c
25
Introduce intermediate variable: V1

S  AV1
S  ABTa
V1  BTa
A  TaTaTb
A  TaTaTb
B  ATc
B  ATc
Ta  a
Ta  a
Tb  b
Tb  b
Tc  c
Tc  c
26
Introduce intermediate variable: V2
S  AV1
S  AV1
V1  BTa
V1  BTa
A  TaV2
A  TaTaTb
V2  TaTb
B  ATc
B  ATc
Ta  a
Ta  a
Tb  b
Tb  b
Tc  c
Tc  c 27
Final grammar in Chomsky Normal Form:
S  AV1
V1  BTa
A  TaV2
Initial grammar
V2  TaTb
S  ABa B  ATc
A  aab Ta  a
B  Ac Tb  b
Tc  c 28
In general:

From any context-free grammar


(which doesn’t produce  )
not in Chomsky Normal Form
we can obtain:
An equivalent grammar
in Chomsky Normal Form

29
The Procedure
First remove:
Nullable variables
Unit productions

Then, for every symbola :


Add production Ta  a
In productions: replace a with Ta
New variable: Ta
30
Replace any production A  C1C2 Cn

with A  C1V1
V1  C2V2

Vn2  Cn1Cn

New intermediate variables: V1, V2 ,  ,Vn2

31
Theorem:
For any context-free grammar
(which doesn’t produce  )
there is an equivalent grammar
in Chomsky Normal Form
Observations
• Chomsky normal forms are good
for parsing and proving theorems
• It is very easy to find the Chomsky normal
form for any context-free grammar
32
Greibach Normal Form

All productions have form:

A  a V1V2 Vk k 0

symbol variables

33
Examples:

S  cAB
S  abSb
A  aA | bB | b
S  aa
Bb

Greinbach Not Greinbach


Normal Form Normal Form

34
Conversion to Greinbach Normal Form:

S  aTb STb
S  abSb S  aTa
S  aa Ta  a
Tb  b
Greinbach
Normal Form
35
Theorem: For any context-free grammar
(which doesn’t produce  )
there is an equivalent grammar
in Greibach Normal Form
Observations
• Greinbach normal forms are very good
for parsing
• It is hard to find the Greinbach normal
form of any context-free grammar
36

You might also like