0% found this document useful (0 votes)
141 views51 pages

Simplifications of Context-Free Grammars

The document discusses various simplifications and normal forms for context-free grammars, including substitution rules, removing nullable and unit productions, and converting grammars to Chomsky normal form and Greibach normal form. It also describes how to determine if a variable is useless and the procedure to remove useless productions from a grammar.

Uploaded by

Atika Rahmanda
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 (0 votes)
141 views51 pages

Simplifications of Context-Free Grammars

The document discusses various simplifications and normal forms for context-free grammars, including substitution rules, removing nullable and unit productions, and converting grammars to Chomsky normal form and Greibach normal form. It also describes how to determine if a variable is useless and the procedure to remove useless productions from a grammar.

Uploaded by

Atika Rahmanda
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/ 51

Simplifications

of
Context-Free Grammars

1
A Substitution Rule

Equivalent
grammar
S  aB
S  aB | ab
A  aaA
Substitute A  aaA
A  abBc Bb A  abBc | abbc
B  aA
B  aA
Bb
2
A Substitution Rule
S  aB | ab
A  aaA
A  abBc | abbc
B  aA
Substitute
B  aA
S  aB | ab | aaA
A  aaA Equivalent
A  abBc | abbc | abaAc grammar
3
In general:
A  xBz

B  y1

Substitute
B  y1

equivalent
A  xBz | xy1z grammar
4
Nullable Variables

  production : A

Nullable Variable: A 

5
Removing Nullable Variables

Example Grammar:

S  aMb
M  aMb
M 

Nullable variable

6
Final Grammar

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

7
Unit-Productions

Unit Production: A B

(a single variable in both sides)

8
Removing Unit Productions

Observation:

A A

Is removed immediately

9
Example Grammar:

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

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

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

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

13
Remove repeated productions

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

14
Useless Productions

S  aSb
S 
SA
A  aA Useless Production

Some derivations never terminate...

S  A  aA  aaA    aa aA  
15
Another grammar:

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

16
In general: contains only
terminals
if S    xAy    w

w L(G )

then variable A is useful

otherwise, variable A is useless

17
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


18
Removing Useless Productions

Example Grammar:

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

19
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 }

20
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
21
Second: Find all variables
reachable from S

Use a Dependency Graph

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

22
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

23
Removing All

Step 1: Remove Nullable Variables

Step 2: Remove Unit-Productions

Step 3: Remove Useless Variables

24
Normal Forms
for
Context-free Grammars

25
Chomsky Normal Form

Each productions has form:

A  BC or Aa

variable variable terminal

26
Examples:

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

27
Convertion to Chomsky Normal Form

Example: S  ABa
A  aab
B  Ac

Not Chomsky
Normal Form

28
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
29
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
30
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 31
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 32
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

33
The Procedure

First remove:

Nullable variables

Unit productions

34
Then, for every symbol a:

Add production Ta  a

In productions: replace a with Ta

New variable: Ta
35
Replace any production A  C1C2 Cn

with A  C1V1
V1  C2V2

Vn2  Cn1Cn

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


36
Theorem: For any context-free grammar
(which doesn’t produce  )
there is an equivalent grammar
in Chomsky Normal Form

37
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

38
Greinbach Normal Form

All productions have form:

A  a V1V2 Vk k 0

symbol variables

39
Examples:

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

Greinbach Not Greinbach


Normal Form Normal Form

40
Conversion to Greinbach Normal Form:

S  aTb STb
S  abSb S  aTa
S  aa Ta  a
Tb  b
Greinbach
Normal Form
41
Theorem: For any context-free grammar
(which doesn’t produce )
there is an equivalent grammar
in Greinbach Normal Form

42
Observations

• Greinbach normal forms are very good


for parsing

• It is hard to find the Greinbach normal


form of any context-free grammar

43
The CYK Parser

44
The CYK Membership Algorithm

Input:

• Grammar G in Chomsky Normal Form

• String w

Output:

find if w L(G )
45
The Algorithm
Input example:
• Grammar G : S  AB
A  BB
Aa
B  AB
Bb

• String w : aabbb
46
aabbb
a a b b b

aa ab bb bb

aab abb bbb

aabb abbb

aabbb

47
S  AB
A  BB
a a b b b
Aa A A B B B
B  AB
aa ab bb bb
Bb
aab abb bbb

aabb abbb

aabbb
48
S  AB
A  BB
a a b b b
Aa A A B B B
B  AB
aa ab bb bb
Bb S,B A A
aab abb bbb

aabb abbb

aabbb
49
S  AB
a a b b b
A  BB
A A B B B
Aa
aa ab bb bb
B  AB
S,B A A
Bb aab abb bbb
S,B A S,B
aabb abbb
A S,B
aabbb
S,B
50
Therefore: aabbb  L(G )

3
Time Complexity: | w|

Observation: The CYK algorithm can be


easily converted to a parser
(bottom up parser)
51

You might also like