Tengo un problema con este ejercicio:
Sea G la siguiente gramática ambigua para el cálculo λ:
E → v | λv.E | EE | (E)
donde E es el símbolo único no terminal, λv.E representa la abstracción wrt la variable v en E, y EE representa la aplicación.
- Defina una gramática LL (1) G 'tal que L (G') = L (G) y la ambigüedad de G se resuelva imponiendo las siguientes convenciones habituales:
- la abstracción es correcta asociativa;
- la aplicación se deja asociativa;
- La aplicación tiene mayor prioridad que la abstracción.
- Muestre la tabla de análisis LL (1) para G 'y el árbol de análisis obtenido al analizar la cadena
λv1. λv2. v1v2v1
.
Eliminé la precedencia y la asociación de la ambigüedad, obteniendo esta gramática:
E -> EF | F
F -> λv.G | G
G -> (E) | v
que no es LL (1), ya que la producción E -> EF
se deja recursiva. Sin embargo, eliminando la recursión izquierda de esa producción obtengo:
E -> FE¹
E¹-> FE¹ | ɛ
F -> λv.G | G
G -> (E) | v
que no cumple con el requisito 1.2.
Busqué una solución en Internet, pero parece que no es posible eliminar la recursividad izquierda conservando la asociatividad izquierda.
Sin embargo, este ejercicio apareció en el examen de compiladores hace algunos años, por lo que debe haber una respuesta correcta.
Gracias por tu ayuda.
fuente
Mi intento:
Esta gramática es LL (1) y debe respetar las propiedades requeridas.
fuente