0% found this document useful (0 votes)
90 views

F

The document discusses ambiguity in grammars and languages. It provides examples of ambiguous grammars that generate the same string with different parse trees. It also presents methods for removing ambiguity, such as introducing precedence rules and new variables to group expressions. The document proves that a string has two distinct parse trees if and only if it has two distinct leftmost derivations.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
90 views

F

The document discusses ambiguity in grammars and languages. It provides examples of ambiguous grammars that generate the same string with different parse trees. It also presents methods for removing ambiguity, such as introducing precedence rules and new variables to group expressions. The document proves that a string has two distinct parse trees if and only if it has two distinct leftmost derivations.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

Ambiguity in Grammars and Languages

In the grammar

1. E I
2. E E+E
3. E EE
4. E (E)

the sentential form E + E E has two deriva-
tions:
E E+E E+EE
and
E EE E+EE
This gives us two parse trees:
E E

E + E E * E

E * E E + E

(a) (b)
167
The mere existence of several derivations is not
dangerous, it is the existence of several parse
trees that ruins a grammar.

Example: In the same grammar

5. I a
6. I b
7. I Ia
8. I Ib
9. I I0
10. I I1
the string a + b has several derivations, e.g.

E E+E I +E a+E a+I a+b


and

E E+E E+I I +I I +ba+b


However, their parse trees are the same, and
the structure of a + b is unambiguous.
168
Definition: Let G = (V, T, P, S) be a CFG. We
say that G is ambiguous is there is a string in
T that has more than one parse tree.

If every string in L(G) has at most one parse


tree, G is said to be unambiguous.

Example: The terminal string a + a a has two


parse trees:

E E

E + E E * E

I E * E E + E I

a I I I I a

a a a a

(a) (b)

169
Removing Ambiguity From Grammars

Good news: Sometimes we can remove ambi-


guity by hand

Bad news: There is no algorithm to do it

More bad news: Some CFLs have only am-


biguous CFGs

We are studying the grammar


E I | E + E | E E | (E)
I a | b | Ia | Ib | I0 | I1

There are two problems:

1. There is no precedence between * and +

2. There is no grouping of sequences of op-


erators, e.g. is E + E + E meant to be
E + (E + E) or (E + E) + E.

170
Solution: We introduce more variables, each
representing expressions of same binding strength.

1. A factor is an expresson that cannot be


broken apart by an adjacent * or +. Our
factors are

(a) Identifiers

(b) A parenthesized expression.

2. A term is an expresson that cannot be bro-


ken by +. For instance a b can be broken
by a1 or a1. It cannot be broken by +,
since e.g. a1 + a b is (by precedence rules)
same as a1 + (a b), and a b + a1 is same
as (a b) + a1.

3. The rest are expressions, i.e. they can be


broken apart with * or +.

171
Well let F stand for factors, T for terms, and E
for expressions. Consider the following gram-
mar:

1. I a | b | Ia | Ib | I0 | I1
2. F I | (E)
3. T F |T F
4. E T |E+T

Now the only parse tree for a + a a will be

E + T

T T * F

F F I

I I a

a a
172
Why is the new grammar unambiguous?

Intuitive explanation:

A factor is either an identifier or (E), for


some expression E.

The only parse tree for a sequence

f1 f2 fn1 fn
of factors is the one that gives f1 f2 fn1
as a term and fn as a factor, as in the parse
tree on the next slide.

An expression is a sequence

t1 + t2 + + tn1 + tn
of terms ti. It can only be parsed with
t1 + t2 + + tn1 as an expression and tn as
a term.
173
T

T * F

T * F
. .
.
T

T * F

174
Leftmost derivations and Ambiguity

The two parse trees for a + a a


E E

E + E E * E

I E * E E + E I

a I I I I a

a a a a

(a) (b)
give rise to two derivations:
E E+E I +E a+E a+EE
lm lm lm lm
a+I E a+aE a+aI a+aa
lm lm lm lm

and
E E E E +E E I +E E a+E E
lm lm lm lm
a+I E a+aE a+aI a+aa
lm lm lm lm

175
In General:

One parse tree, but many derivations

Many leftmost derivation implies many parse


trees.

Many rightmost derivation implies many parse


trees.

Theorem 5.29: For any CFG G, a terminal


string w has two distinct parse trees if and only
if w has two distinct leftmost derivations from
the start symbol.

176
Sketch of Proof: (Only If.) If the two parse
trees differ, they have a node a which dif-
ferent productions, say A X1X2 Xk and
B Y1Y2 Ym. The corresponding leftmost
derivations will use derivations based on these
two different productions and will thus be dis-
tinct.

(If.) Lets look at how we construct a parse


tree from a leftmost derivation. It should now
be clear that two distinct derivations gives rise
to two different parse trees.

177
Inherent Ambiguity

A CFL L is inherently ambiguous if all gram-


mars for L are ambiguous.

Example: Consider L =

{anbncmdm : n 1, m 1}{anbmcmdn : n 1, m 1}.

A grammar for L is

S AB | C
A aAb | ab
B cBd | cd
C aCd | aDd
D bDc | bc

178
Lets look at parsing the string aabbccdd.

S S

A B C

a A b c B d a C d

a b c d a D d

b D c

b c

(a) (b)

179
From this we see that there are two leftmost
derivations:

S AB aAbB aabbB aabbcBd aabbccdd


lm lm lm lm lm

and

S C aCd aaDdd aabDcdd aabbccdd


lm lm lm lm lm

It can be shown that every grammar for L be-


haves like the one above. The language L is
inherently ambiguous.

180

You might also like