Una gramática es ambigua si puede generar una secuencia de símbolos con dos árboles sintácticos diferentes. Una gramática ambigua puede rescribirse para eliminar la ambigüedad.
Ejemplo: <a> ::= <a> (+ | *) <a> | número
Secuencia: 1*2+3
Arboles sintácticos generados:
Una gramática no se puede utilizar para la realización de un compilador por que no especifica la estructura sintáctica del lenguaje.
Aquí, “otra” representa a cualquier otra instrucción. De acuerdo con esta gramática, la siguiente instrucción condicional compuesta:
Ejemplo: La gramática es ambigua porque aa tiene dos derivaciones por la izquierda
Esta gramática genera el lenguaje a+ que también es el lenguaje generado por la gramática no ambigua
Proceso
- No existe un algoritmo que nos indique si una GIC es ambigua
- Existen LIC que sólo tienen GIC ambiguas: inherentemente ambiguos
- Para las construcciones de los lenguajes de programación comunes existen técnicas para la eliminación de la ambigüedad
- Ejemplo: causas de ambigüedad en la siguiente gramática
No se respeta la precedencia de operadores
Una secuencia de operadores idénticos puede agruparse desde la izquierda y desde la derecha. Lo convencional es agrupar desde la izquierda.- No existe un algoritmo que nos indique si una GIC es ambigua
- Existen LIC que sólo tienen GIC ambiguas: inherentemente ambiguos
- Para las construcciones de los lenguajes de programación comunes existen técnicas para la eliminación de la ambigüedad
- Ejemplo: causas de ambigüedad en la siguiente gramática
No se respeta la precedencia de operadores
Ejemplo: modificamos la gramática para forzar la precedencia
No hay comentarios:
Publicar un comentario