Gramática ambigua

– Para una cadena terminal hay más de un árbol sintáctico

Ejemplo:

x | y | z | () | + | *

(recursión a izquierda y derecha para un mismo símbolo no-term.) Dos árboles sintácticos para la cadena x + y * z :

+ *

x * + z y z x y

Evitar la doble recursividad:

– Introduciendo nuevos símbolos no-terminales (dejando * y + al mismo nivel)

| + | * x | y | z | ()

– misma prioridad para * y + , y asociatividad a izquierdas

– Introduciendo nuevos símbolos no-terminales (dejando * y + a distinto

nivel)

| +
| * x | y | z | ()

– Prioridad de * respecto de +, y asociatividad a izquierdas para ambas operaciones.

Fuente: Apuntes de Informática VII de la FCA de la UNAM