CSCI 2670 Introduction to Theory of Computing September 21, 2004
Agenda Last week –Pumping lemma –Context-free grammars Examples, definition, strategies for building This week –More on CFG’s Ambiguity, Pushdown automata, pumping lemma for CFG’s Next week –Midterm (Chapters 1 & 2)
Announcement Homework due next Tuesday (9/28) –2.8, 2.9, 2.12, 2.13, 2.15, 2.18 d, 2.22
Ambiguity Consider the CFG ({S},{0,1},R,S), where the rules of R are S 0 | 1 | S + S | S * S Derive the string 0 * 1 + 1
Ambiguity S 0 | 1 | S + S | S * S 0 * S SS* S+S 0 11 S SS+ S*S 1 01 Different parse trees!
Leftmost derivation & ambiguity A derivation of a string w in a grammar G is a leftmost derivation if every step of the derivation replaced the leftmost variable A string is derived ambiguously in CFG G if it has two or more different leftmost derivations The grammar G is ambiguous if it generates some string ambiguously –Some grammars are inherently ambiguous
Chomsky normal form Method of simplifying a CFG Definition: A context-free grammar is in Chomsky normal form if every rule is of one of the following forms A BC A a where a is any terminal and A is any variable, and B, and C are any variables or terminals other than the start variable the rule S ε is permitted, where S is the start variable
CFG’s and Chomsky normal form Theorem: Any context-free language is generated by a context-free grammar in Chomsky normal form. Proof idea: Convert any CFG to one in Chomsky normal form by removing or replacing all rules in the wrong form 1.Add a new start symbol 2.Eliminate ε rules of the form A ε 3.Eliminate unit rules of the form A B 4.Convert remaining rules into proper form
Convert a CFG to Chomsky normal form 1.Add a new start symbol -Create the following new rule S 0 S where S is the start symbol and S 0 is not used in the CFG
Convert a CFG to Chomsky normal form 2.Eliminate all ε rules A ε, where A is not the start variable -For each rule with an occurrence of A on the right-hand side, add a new rule with the A deleted R uAv becomes R uAv | uv R uAvAw becomes R uAvAw | uvAw | uAvw | uvw -If we have R A, replace it with R ε unless we had already removed R ε
Convert a CFG to Chomsky normal form 3.Eliminate all unit rules of the form A B -For each rule B u, add a new rule A u, where u is a string of terminals and variables, unless this rule had already been removed -Repeat until all unit rules have been replaced
Convert a CFG to Chomsky normal form 4.Convert remaining rules into proper form -What’s left? -Replace each rule A u 1 u 2 …u k, where k 3 and u i is a variable or a terminal with k-1 rules A u 1 A 1 A 1 u 2 A 2 … A k-2 u k-1 u k
Example S S 1 | S 2 S 1 S 1 b | Ab | ε A aAb | ab S 2 S 2 a | Ba | ε B bBa | ba Step 1: Add a new start symbol
Example S 0 S S S 1 | S 2 S 1 S 1 b | Ab A aAb | ab | ε S 2 S 2 a | Ba B bBa | ba | ε Step 2: Eliminate ε rules
Example S 0 S S S 1 | S 2 S 1 S 1 b | Ab | b A aAb | ab S 2 S 2 a | Ba | a B bBa | ba Step 3: Eliminate all unit rules
Example S 0 S 1 b | Ab | b | S 2 a | Ba | a S S 1 b | Ab | b | S 2 a | Ba | a S 1 S 1 b | Ab | b A aAb | ab S 2 S 2 a | Ba | a B bBa | ba Step 4: Convert remaining rules to proper form
Example S 0 S 1 b | Ab | b | S 2 a | Ba | a S S 1 b | Ab | b | S 2 a | Ba | a S 1 S 1 b | Ab | b A aA 1 | ab A 1 Ab S 2 S 2 a | Ba | a B bB 1 | ba B 1 Ba
Tomorrow Pushdown automata