Compiladores - Gramatica Ambigua
Compiladores - Gramatica Ambigua
Compiladores - Gramatica Ambigua
Una gramtica libre de contexto se dice que es una gramtica ambigua si hay una cadena que puede ser generada por la gramtica en ms de una forma (es decir, la cadena soporta ms de un rbol de anlisis sintctico o, de manera equivalente, ms de uno rama izquierda ). Un lenguaje libre de contexto es inherentemente ambiguo si todas las gramticas libres de contexto generan este lenguaje es ambiguo.
Gramtica ambigua
Algunos lenguajes de programacin son gramticas ambiguas, en cuyo caso la informacin semntica necesaria para elegir un rbol de sintaxis de la construccin deseada ambigua. Por ejemplo, en C de la siguiente manera: X* Y; Puede interpretarse como: La declaracin de un identificador de llamada y de tipo puntero a x o Una expresin en la que X se multiplica por Y y el resultado, entonces se descarta.
Para elegir correctamente entre dos interpretaciones posibles, uno compilador debe consultar a su tabla de smbolos para saber si x se declar como un nombre de tipo definido que es visible en este momento.
Anlisis estructural de Pepe vio a Pablo enfurecido siendo Pepe quien est enfurecido.
Anlisis estructural de Pepe vio a Pablo enfurecido siendo Pablo quien est enfurecido.
Analizador sintctico
Un analizador sintctico (o parser) es una de las partes de un compilador que transforma su entrada en un rbol de derivacin. El anlisis sintctico convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada. Un analizador lxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintctico para construir la estructura de datos, por ejemplo un rbol de anlisis o rboles de sintaxis abstracta.
Analizador sintctico
El anlisis sintctico tambin es un estado inicial del anlisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexin gramatical, como los idiomas romances o el latn. Los lenguajes habitualmente reconocidos por los analizadores sintcticos son los lenguajes libres de contexto. Cabe notar que existe una justificacin formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autmata de pila, de modo que todo analizador sintctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autmata de pila. Los analizadores sintcticos fueron extensivamente estudiados durante los aos 70 del siglo XX, detectndose numerosos patrones de funcionamiento en ellos, cosa que permiti la creacin de programas generadores de analizadores sintticos a partir de una especificacin de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales como yacc, GNU bison y javaCC.