Question

How to eliminate left recursion for the following grammar?

E := EE+|EE-|id

Using the common procedure:

A := Aa|b

translates to:

A := b|A'
A' := ϵ| Aa 

Applying this to the original grammar we get:

A = E, a = (E+|E-) and b = id

Therefore:

E := id|E'
E' := ϵ|E(E+|E-)

But this grammar seems incorrect because

ϵE+ -> ϵ id +

would be valid but that is an incorrect postfix expression.

Was it helpful?

Solution

Your “common procedure” is cited wrong. Taking it from the Dragon Book:

A := Aα | β

becomes

A  := βA′
A′ := αA′ | ϵ

… which yields:

E  := id E′
E′ := (E + | E -) E′ | ϵ
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top