DIAGRAMA DE SINTAXISUn diagrama de sintaxis (también llamados diagramas de Conway) es un grafo dirigido donde los elementos no terminales aparecen como rectángulos, y los terminales como círculos o elipses. Todo diagrama de sintaxis posee un origen y un destino, que no se suelen representar explícitamente, sino que se asume que el origen se encuentra a la izquierda del diagrama y el destino a la derecha. Cada arco con origen en " y destino en $ representa que el símbolo " puede ir seguido del $ (pudiendo ser " y $ tanto terminales como no terminales). De esta forma todos los posibles caminos desde el inicio del grafo hasta el final, representan formas sentenciales válidas. Demostraremos que los diagramas de sintaxis permiten representar las mismas gramáticas que la notación BNF, por inducción sobre las operaciones básicas de BNF: Eliminación de la ambigüedad. Una GLC es ambigua si existe una cadena w L(G) que tiene más de una derivación por la izquierda o más de una derivación por la derecha o si tiene dos o más árboles de derivación. En caso de que toda cadena w L(G) tenga un único árbol de derivación, la gramática no es ambigua. Ejemplo: La gramática S aS| Sa | a es ambigua porque aa tiene dos derivaciones por la izquierda S aS aa S Sa aa Esta gramática genera el lenguaje a+ que también es el lenguaje generado por la gramática no ambigua S aS | a. L no es ambiguo. ya que por más transformaciones que se realicen sobre ellas. si existe cuando menos una gramática no ambigua para L. los cuales son: Ambigüedad Inherente: Las gramáticas que presentan este tipo de ambigüedad no pueden utilizarse para lenguajes de programación. – El lenguaje de las expresiones no es Ambiguo – Las expresiones regulares no son ambiguas Ejemplo de un lenguaje inherentemente ambiguo: . EJEMPLO •La gramática para expresiones aritméticas sobre las variables x y y: –E –E –E –E E+E E*E x y es ambigua porque la cadena x + y * x tiene dos árboles de derivación: TIPOS DE AMBIGÜEDAD Dentro del estudio de gramáticas existen dos tipos fundamentales de ambigüedad. nunca se podrá eliminar completamente la ambigüedad que presentan. Un lenguaje L es inherentemente ambiguo si todas sus gramáticas son ambiguas. El lenguaje: . m 1} {a b n m m n c d |n 1. ELIMINACIÓN DE LA AMBIGÜEDAD. (Se le considera "ambigüedad" porque existen métodos para realizar análisis sintáctico que no aceptan gramáticas con estas características) Dónde se presenta la Ambigüedad Transitoria generalmente la ambigüedad se presenta cuando existen producciones con factores comunes (distintas alternativas para un símbolo no-terminal que inician de la misma forma). m 1} {a b n m m n c d |n 1.Factores comunes izquierdos inmediatos y No-inmediatos. es necesario. m 1} AB | C A aAb | ab C aCd | aDd B cBd | cd D bDc | bc S La gramática es ambigua: hay cadenas con más de una derivación más izquierda: Considere: aabbccdd (m = n = 2) S ⇒ AB ⇒ aAbB ⇒ aabbB ⇒ aabbcBd ⇒ aabbccdd S ⇒ C ⇒ aCd ⇒ aaDdd ⇒ aabDcdd ⇒ aabbccdd . ó cuando existen producciones que son recursivas izquierdas (producciones para un símbolo no-terminal en las cuales el primer símbolo de su forma sentencial es ese mismo símbolo no-terminal).L = {anbncmdm | n . Una vez que se logra lo anterior. la gramática queda lista para ser reconocida por la mayor parte de los analizadores sintácticos. – 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 . . ¿Cómo solucionar el problema de la Ambigüedad Transitoria? Para eliminar este tipo de ambigüedad.La gramática 1.L = {anbncmdm | n L es un LLC: 1. m 1} AB | C A aAb | ab C aCd | aDd B cCd | cd D bDc | bc -S _ ¿Por qué todas las gramáticas para este lenguaje son ambiguas? – Considere cualquier cadena con m = n – ¡Siempre habrá dos derivaciones para estas cadenas! Ambigüedad Transitoria: Este tipo de ambigüedad puede llegar a ser eliminada realizando una serie de transformaciones sobre la gramática original. primero eliminar: .Recursividad izquierda inmediata y No-inmediata. • una secuencia de operadores idénticos puede agruparse desde la izquierda y desde la derecha. . Lo convencional es agrupar desde la izquierda.