1 / 37

# Normal Forms for Context-Free Grammars - PowerPoint PPT Presentation

CS 3240 – Chapter 6. Normal Forms for Context-Free Grammars. Topics. 6.1: Simplifying Grammars Substitution Removing useless variables Removing λ Removing unit productions 6.2: Normal Forms Chomsky Normal (CNF) 6.3: A Membership Algorithm CYK Algorithm

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about ' Normal Forms for Context-Free Grammars' - chelsa

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### Normal Forms for Context-Free Grammars

• 6.1: Simplifying Grammars

• Substitution

• Removing useless variables

• Removing λ

• Removing unit productions

• 6.2: Normal Forms

• Chomsky Normal (CNF)

• 6.3: A Membership Algorithm

• CYK Algorithm

• An example of bottom-up parsing

CS 3240 - Normal Forms for Context-Free Languages

• Variables in CFGs can often be eliminated

• If they are not recursive, you can substitute their rules throughout

• See next slide

CS 3240 - Normal Forms for Context-Free Languages

A ➞ a | aaA | abBc

B ➞ abbA | b

Just substitute directly for B:

A➞ a | aaA | ababbAc | abbc

CS 3240 - Normal Forms for Context-Free Languages

• A variable is useless if:

• It can’t be reached from the start state, or

• It never leads to a terminal string

• Due to endless recursion

• Both problems can be detected by a dependency graph

• See next slide

CS 3240 - Normal Forms for Context-Free Languages

S ➞ aSb | A | λ

A ➞ aA

A is useless (non-terminating):

S ➞ aSb | λ

CS 3240 - Normal Forms for Context-Free Languages

S ➞ A

A ➞ aA | λ

B ➞ bA

B is useless (non-reachable):

S ➞ A

A ➞ aA | λ

CS 3240 - Normal Forms for Context-Free Languages

Simplify the following:

S ➞ aS | A | C

A ➞ a

B ➞ aa

C ➞ aCb

CS 3240 - Normal Forms for Context-Free Languages

CS 3240 - Normal Forms for Context-Free Languages

Simplify the following grammar:

S ➞ AB | AC

A ➞ aAb | bAa | a

B ➞ bbA | aaB | AB

D ➞ bD | aC

CS 3240 - Normal Forms for Context-Free Languages

Nullable Variables

• Any variable that can eventually terminate in the empty string is said to be nullable

• Note: a variable may be indirectly nullable

• In general: if A ➞ V1V2…Vn, and all the Vi are nullable, then A is also nullable

• See Theorem 6.3

CS 3240 - Normal Forms for Context-Free Languages

Finding Nullable Variables

Consider the following grammar:

S ➞ a | Xb | aYa

X ➞ Y | λ

Y ➞ b | X

Which variables are nullable?

How can we substitute the effect of λ before removing it?

CS 3240 - Normal Forms for Context-Free Languages

• First find all nullable variables

• Then substitute (A + λ) for every nullable variable A, and expand

• Then remove λ everywhere from the grammar

• What’s left is equivalent to the original grammar

• except the empty string may be lost

• we won’t worry about that

CS 3240 - Normal Forms for Context-Free Languages

Removing λExample

Consider the following grammar (again):

S ➞ a | Xb | aYa

X ➞ Y | λ

Y ➞ b | X

How can we substitute the effect of λ before removing it?

CS 3240 - Normal Forms for Context-Free Languages

S → aSbS | bSaS | λ

S → aSa | bSb | X

X → aYb | bYa

Y → aY | bY | λ

CS 3240 - Normal Forms for Context-Free Languages

• Unit Productions often occur in chains

• A ➞ B ➞ C

• Must maintain the effect of BandC when substituting for A throughout

• Procedure:

• Find all unit chains

• Rebuild grammar by:

• Keeping all non-unit productions

• Keeping only the effect of all unit productions/chains

CS 3240 - Normal Forms for Context-Free Languages

Removing Unit ProductionsExample

S ➞ A | bb

A ➞ B | b

B ➞ S | a

Note that S ⇒* {A,B}, A⇒* {B,S}, B ⇒* {S,A}

Giving:

S ➞ bb | b | a // Added non-unit part of A and B

A ➞ b| a | bb // Added non-unit part of B and S

B ➞ a | bb | b// Added non-unit part of S and A

CS 3240 - Normal Forms for Context-Free Languages

• 1) Determine all variables reachable by unit rules for each variable

• 2) Keep all non-unit rules

• 3) Substitute non-unit rules in place of each variable reachable by unit productions

CS 3240 - Normal Forms for Context-Free Languages

S ➞ aA

A ➞ BB

B ➞ aBb | λ

Now remove nulls and see what happens….

(Also see the solution for #15 in 6.1)

CS 3240 - Normal Forms for Context-Free Languages

S ➞ AB

A ➞ B

B ➞ aB | BB | λ

CS 3240 - Normal Forms for Context-Free Languages

• Do things in the following recommended order:

• Remove nulls

• Remove unit productions

• Remove useless variables

• Simplify by substitution as desired

CS 3240 - Normal Forms for Context-Free Languages

Chomsky Normal FormSection 6.2

• Very important for our purposes

• All CNF rules are of one of the following two forms:

• A ➞ c (a single terminal)

• A ➞ XY (exactly two variables)

• Must begin the transformation aftersimplifying the grammar (removing λ, all unit productions, useless variables, etc.)

CS 3240 - Normal Forms for Context-Free Languages

Chomsky Normal FormExample

Convert to CNF:

S ➞ bA | aB

A ➞ bAA | aS | a

B ➞ aBB | bS | b

(NOTE: already has no nulls or units)

CS 3240 - Normal Forms for Context-Free Languages

Convert the following grammar to CNF:

S ➞ abAB

A ➞ bAB | λ

B ➞ BAa | A | λ

CS 3240 - Normal Forms for Context-Free Languages

Convert the following grammar to CNF:

S ➞ aS | bS | B

B ➞ bb | C | λ

C ➞ cC | λ

CS 3240 - Normal Forms for Context-Free Languages

Greibach Normal Form

• Single terminal character followed by zero or more variables (cV*, c ∈ Σ )

• V → a

• V → aBCD…

• λ allowed only in S → λ

• Sometimes need to make up new variable names

CS 3240 - Normal Forms for Context-Free Languages

Greibach Example 1

S → AB

A → aA | bB | b

B → b

Substitute for A in first rule (i.e., add B to each rule for A):

S → aAB | bBB | bB

The other rules are okay

CS 3240 - Normal Forms for Context-Free Languages

Greibach Example 2

S → abSb |aa

Add rules to generate a and b:

S → aBSB |aA

A → a

B → b

CS 3240 - Normal Forms for Context-Free Languages

The CF Membership ProblemSection 6.3

• The “parsing” problem

• How do we know if a string is generated by a given grammar?

• Bottom-up parsing (CYK Algorithm)

• An Example of Dynamic Programming

• Requires Chomsky Normal Form (CNF)

• Start by considering A ➞ c rules

• Build up the parse tree from there

CS 3240 - Normal Forms for Context-Free Languages

S ➞ XY

X ➞ XA | a | b

Y ➞ AY | a

A ➞ a

Does this grammar generate “baaa”?

CS 3240 - Normal Forms for Context-Free Languages

Parse Trees for “baaa”

CNF yields binary trees.(Can you find a third parse tree?)

CS 3240 - Normal Forms for Context-Free Languages

Parsing “baaa”

S ➞ XY

X ➞ XA | a | b

Y ➞ AY | a

A ➞ a

Stage 1:

b ⇐ X

a ⇐ X, Y, A

Stage 2:

ba ⇐ X(X,Y,A) = XX, XY, XA ⇐ S, X

aa ⇐ (X,Y,A)(X,Y,A) = XX, XY, XA,

YX, YY, YA,

AX, AY, AA

⇐ S, X, Y

Stage 3:

baa ⇐ ba a ⇐ (S,X)(X,Y,A) = SX, SY, SA,

XX, XY, XA

= S, X

baa ⇐ baa ⇐ X(S,X,Y) = XS, XX, XY = S

aaa ⇐ aa a ⇐ (S,X,Y)(X,Y,A) = _________

aaa ⇐ a aa ⇐ (X,Y,A)(S,X,Y) = _________

Stage 4: (you finish…)

baaa:

baaa ⇐ __________

baaa ⇐ __________

baa a ⇐ __________

CS 3240 - Normal Forms for Context-Free Languages

CYK AlgorithmTabular Form – Stage 1

CS 3240 - Normal Forms for Context-Free Languages

CYK AlgorithmTabular Form – Stage 2

CS 3240 - Normal Forms for Context-Free Languages

CYK AlgorithmTabular Form – Stage 1

CS 3240 - Normal Forms for Context-Free Languages

CYK AlgorithmTabular Form – Stage 1

CS 3240 - Normal Forms for Context-Free Languages

Does the following grammar generate “abbaab”?

S ➞ SAB | λ

A ➞ aA | λ

B ➞ bB | λ

CS 3240 - Normal Forms for Context-Free Languages