Pregunta

¿Cómo eliminar la recursión izquierda para la siguiente gramática?

E := EE+|EE-|id

Utilizando el procedimiento común:

A := Aa|b

se traduce en:

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

Aplicando esto a la gramática original obtenemos:

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

Por lo tanto:

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

Pero esta gramática parece incorrecta porque

ϵE+ -> ϵ id +

sería válido pero esa es una expresión incorrecta de postfix.

¿Fue útil?

Solución

Su "procedimiento común" se cita mal. Tomándolo del Libro del Dragón:

A := Aα | β

se convierte en

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

... que produce:

E  := id E′
E′ := (E + | E -) E′ | ϵ
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top