viernes, 29 de mayo de 2020

5.6 - Eliminación de la ambigüedad.

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.

 

Ejemplo: modificamos la gramática para forzar la precedencia 

No hay comentarios:

Publicar un comentario

Profesor

Aqui tiene mi Blog o Pagina con evidencias, ejercicios, teoría y ejemplos de lo que hemos hecho en este cierre de semestre. Como puede ver a...