4/17/2018 MA/CSSE 474 Theory of Computation Answer Questions about Exam2 problems Removing Ambiguity Chomsky, Griebach Normal Forms (who is he foolin', thinking that there will be time to get to all of this?) Recap: Derivations of The Smart Cat • A left-most derivation is: S NP VP the Nominal VP the Adjs N VP the Adj N VP the smart N VP the smart cat VP the smart cat V NP the smart cat smells NP the smart cat smells Nominal the smart cat smells N the smart cat smells chocolate • A right-most derivation is: S NP VP NP V NP NP V Nominal NP V N NP V chocolate NP smells chocolate the Nominal smells chocolate the Adjs N smells chocolate the Adjs cat smells chocolate the Adj cat smells chocolate the smart cat smells chocolate 1
4/17/2018 Recap: Ambiguity A grammar is ambiguous iff there is at least one string in L ( G ) for which G produces more than one parse tree * . For many applications of context-free grammars, this is a problem. Example: A programming language. •If there can be two different structures for a string in the language, there can be two different meanings. •Not good! * Equivalently, more than one leftmost derivation, or more than one rightmost derivation. Recap: Expression Grammar E E + E E E E E ( E ) E id 2
4/17/2018 Recap:Inherent Ambiguity Some CF languages have the property that every grammar for them is ambiguous. We call such languages inherently ambiguous . Example: L = {a n b n c m : n , m 0} {a n b m c m : n , m 0} . Recap: Inherent Ambiguity L = { a n b n c m : n , m 0} { a n b m c m : n , m 0}. One grammar for L has these rules: S S 1 | S 2 S 1 S 1 c | A /* Generate all strings in { a n b n c m }. A a A b | S 2 a S 2 | B /* Generate all strings in { a n b m c m }. B b B c | Consider any string of the form a n b n c n . It turns out that L is inherently ambiguous. 3
4/17/2018 Recap: Ambiguity and undecidability Both of the following problems are undecidable * : • Given a context-free grammar G , is G ambiguous? • Given a context-free language L , is L inherently ambiguous? Informal definition of undecidable for the first problem: There is no algorithm (procedure that is guaranteed to always halt) that, given a grammar G, determines whether G is ambiguous. But We Can Often Reduce Ambiguity We can get rid of: ● some rules like B , ● rules with symmetric right-hand sides, e.g., S SS E E + E ● rule sets that lead to ambiguous attachment of optional postfixes, such as if … else …. 4
4/17/2018 A Highly Ambiguous Grammar S S SS S ( S ) Resolving the Ambiguity with a Different Grammar The biggest problem is the rule. A different grammar for the language of balanced parentheses: We'd like to have an algorithm for removing all S * -productions S * S except for the case where S SS is actually in the S ( S ) language; S () then we introduce a new start symbol and add one -production whose left side is that new symbol. 5
4/17/2018 Nullable Nonterminals Examples: A nonterminal X is nullable iff S a T a either: T (1) there is a rule X , or (2) there is a rule X PQR … and P , Q , R , … S a T a are all nullable. T A B A B Nullable Nonterminals A nonterminal X is nullable iff either: (1) there is a rule X , or (2) there is a rule X PQ … where P , Q , … are all nullable nonterminals. So we compute Nullable , the set of nullable nonterminals, as follows: 1. Set Nullable to the set of nonterminals that satisfy (1). 2. Repeat until an entire pass is made without adding anything to Nullable Evaluate all other nonterminals with respect to (2). If any nonterminal satisfies (2) and is not in Nullable , add it. 6
4/17/2018 A General Technique for Getting Rid of -Rules Definition: a rule is modifiable iff it is of the form: P Q , for some nullable nonterminal Q . removeEps ( G : cfg) = 1. Let G = G. 2. Find the set Nullable of nullable nonterminals in G . 3. Repeat until G contains no modifiable rules that haven’t been processed: Given the rule P Q , where Q Nullable , add the rule P if it is not already present and if and if P . 4. Delete from G all rules of the form X . 5. Return G . Then L ( G ) = L ( G ) – { } An Example G = {{ S , T , A , B , C , a , b , c }, { a , b , c }, R , S ), R = { S a T a T ABC A a A | C B B b | C C c | } removeEps ( G : cfg) = 1. Let G = G. 2. Find the set N of nullable nonterminals in G . 3. Repeat until G contains no modifiable rules that haven’t been processed: Given the rule P Q , where Q N , add the rule P if it is not already present and if and if P . 4. Delete from G all rules of the form X . 5. Return G . 7
4/17/2018 What If L ? atmostoneEps ( G : cfg) = 1. G = removeEps ( G ). /* i. e., L ( G ) 2. If S G is nullable then 2.1 Create in G a new start symbol S *. 2.2 Add to R G the two rules: S* S* S G . 3. Return G . 8
Recommend
More recommend