¿Qué es el analizador sintáctico?
Es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada. Y en caso de que el programa de entrada sea válido, suministra el árbol sintáctico que lo reconoce. En teoría, se supone que la salida del analizador sintáctico es alguna representación del árbol sintáctico que reconoce la secuencia de tokens suministrada por el analizador léxico. En la práctica, el analizador sintáctico también hace:
• Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico).
• Chequeo de tipos ( del analizador semántico).
• Generar código intermedio.
• Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilación. Este método de trabajo da lugar a los métodos de compilación dirigidos por sintaxis.
GRAMÁTICA AMBIGUA
En informática, a gramática reputa gramática ambigua si hay algo secuencia que puede generar en más que una forma (es decir, la secuencia tiene más de uno analice el árbol o más de uno derivación extrema izquierda). Una lengua esintrínsecamente ambiguo si puede ser generado solamente por gramáticas ambiguas.
Algunos lenguajes de programación tenga gramáticas ambiguas; en este caso, la información semántica es necesaria seleccionar previsto analiza de una construcción ambigua. Por ejemplo, adentro C el siguiente:
x * y;
se puede interpretar cualquiera como el declaración de un identificador y del tipo indicador a x, o como expresión en la cual xse multiplica cerca y y se desecha el resultado. Para elegir entre las dos interpretaciones posibles, a recopilador debe consultar su tabla de símbolo para descubrir si x se ha declarado como nombre del typedef que es visible a este punto.
ELIMINACIÓN DE LA RECURSIVIDAD DE UNA GRAMÁTICA
La necesidad de este método, mencionada en la introducción del artículo, es que el análisis descendente
no puede manejar una gramática recursiva.
¿Qué es una gramática recursiva? R/ Es aquella en la que al menos un no terminal deriva en cadenas que
empiezan con el mismo no terminal, es decir existen producciones por ejemplo con el no terminal A, en
las que van hacia una cadena que empieza con A.
¿Cómo resolver el problema?
R/ Se agrupan todas las producciones de A que existan, las que presentan recursividad y las que no, de la
siguiente manera:
A Aα1 | Aα2 | … | Aαm | β1| β2 | … | βn
Las producciones de A que van a β son lógicamente las que no empiezan con el mismo símbolo no
terminal A. Después gymde hacer esto se sustituyen las producciones de A, primero las que empiezan con β,
por:
A β1A´ | β2A´ |… | βnA´
y después las producciones que tienen recursividad, por:
A´ α1A´ | α2A´ | … | αmA´| ε
ARBOLES DE SINTAXIS ABSTRACTA
Los ASTs (Abstract Syntax Trees, o Árboles de Sintaxis Abstracta) sirven para
manejar la información semántica de un código. La forma más eficiente de manejar la
información proveniente de un lenguaje de programación es la forma arbórea; por éso la
estructura de datos elegida es un árbol. Además, construyendo ASTs a partir de un texto
podemos obviar mucha información irrelevante; si un AST se construye bien, no habrá
que tratar con símbolos de puntuación o azúcar sintáctica en el nivel semántico.
Al contrario que los flujos, una estructura en árbol puede especificar la relación
jerárquica entre los símbolos de una gramática.
Los ASTs pueden intervenir en varias fases del análisis: como producto del
análisis sintáctico, como elemento intermedio en sucesivos análisis semánticos y como
entrada para la generación de código
CONCLUSIONES
Ante la posibilidad, en la vida real, de encontrar gramáticas independientes del contexto, que no se
ajusten a los requerimientos de los analizadores sintácticos, es necesario conocer cuales son las formas de
lograr que esas gramáticas, lleguen a cumplir esos requerimientos.