You are on page 1of 12

Ambiguity in CFG

• An ambiguous grammar is a context-


free grammar for which there exists a string
that can have more than one leftmost
derivation or parse tree, while an
unambiguous grammar is a context-
free grammar for which every valid string has
a unique leftmost derivation or parse tree.
• E ----> E + E
E ----> E * E
E ----> ( E )
E ----> a  |  b  |  c  |  ...
• First Derivation
E ===> E * E ===> ( E ) * E ===> ( E + E) * E ===>
( a + E ) * E ===> ( a + b ) * E ===> ( a + b ) * c
• Second Derivation
E ===> E * E ===> E * c ===> ( E ) * c ===> ( E + E )
* c ===> ( E + b ) * c ===> ( a + b ) * c
Parse Tree: ( a + b ) * c
E
E /|\
/|\ /| \
/ | \
E*E / | \
/ | \
/|\ \ E | E
(E) c /|\ | |
/|\ | |
/|\ / E \ | |
/ /|\ \ | |
E+E | / | \ || |
| | | E | E || |
| | | | || |
a b ( a + b )* c
• For a+b*c
Set of alphabets ∑ = {0,…,9, +, *, (, )}
E -> I
E -> E + E
E -> E * E
E -> (E)
I -> ε | 0 | 1 | … | 9  
From the above grammar String 3*2+5 can be
derived in 2 ways:
 
First leftmost derivation I) Second leftmost derivation
E=>E*E E=>E+E
=>I*E =>E*E+E
=>3*E+E =>I*E+E
=>3*I+E =>3*E+E
=>3*2+E =>3*I+E
=>3*2+I =>3*2+I
=>3*2+5 =>3*2+5
• Following are some examples of ambiguous
grammars:
 
• S-> aS |Sa| Є
• E-> E +E | E*E| id
• A -> AA | (A) | a
• S -> SS|AB , A -> Aa|a , B -> Bb|b
• Inherently ambiguous Language:  
 
Let L be a Context Free Language (CFL). If every
Context Free Grammar G with Language L = L(G) is
ambiguous, then L is said to be inherently
ambiguous Language.
• Ambiguity is a property of grammar not
languages. Ambiguous grammar is unlikely to be
useful for a programming language, because two
parse trees structures(or more) for the same
string(program) implies two different meanings
(executable programs) for the program.
• Problems

You might also like