¿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 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.
Los errores en la programación pueden ser de los siguientes tipos:
• Léxicos, producidos al escribir mal un identificador, una palabra clave o
un
operador.
• Sintácticos, por una expresión aritmética o paréntesis no equilibrados.
• Semánticos, como un operador aplicado a un operando incompatible.
• Lógicos, puede ser una llamada infinitamente
Un buen compilador debe hacerse siempre teniendo también en mente
los errores que se
pueden producir; con ello se consigue:
• Simplificar la estructura del compilador.
• Mejorar la respuesta ante los errores.
La gramática que acepta el analizador sintáctico es una gramática de
contexto libre:
• Gramática : G (N, T, P, S)
N = No terminales.
T = Terminales.
P = Reglas de Producción.
S = Axioma Inicial.
Ambigüedad: Una gramática es ambigua si derivando de forma diferente
con el mismo tipo de derivación se llega al mismo resultado.
Forma Sentencial
Es cualquier secuencia de terminales y no terminales obtenida mediante
derivaciones a partir del axioma inicial.
Una gramática LL(1) es aquella en la que su tabla de chequeo de sintaxis
no posee
entradas múltiples, o sea, es suficiente con examinar sólo un símbolo a la
entrada, para saber qué regla aplicar. Toda gramática reconocible mediante
el método de los diagramas de Conway es LL(1) El método consiste en
seguir un algoritmo partiendo de:
- La cadena a reconocer, junto con un apuntador, que nos indica cual es el
token actual.
- Una pila de símbolos ( terminales y no terminales)
- Una tabla asociada de forma unívoca a una gramática. En esta asignatura
no vamos a ver
como calcular dicha tabla.
Analizadores LR
Vamos a analizar una técnica eficiente de análisis sintáctico ascendente que
se puede utilizar para analizar una amplia clase de gramáticas de contexto
libre. La técnica se denomina análisis sintáctico LR(k); la “L” es por el
examen de la entrada de izquierda a derecha (en inglés, left-to-right), la
“R” por construir una derivación por la derecha (en inglés, rightmost
derivation)
en orden inverso, y la k por el número de símbolos de entrada de examen
por anticipado utilizados para tomar las decisiones del análisis sintáctico.
Cuando se omite, se asume que k, es 1. El análisis LR es atractivo por
varias razones.
• Pueden reconocer la inmensa mayoría de los lenguajes de programación
que puedan ser
generados mediante gramáticas de contexto-libre.
• El método de funcionamiento de estos analizadores posee la ventaja de
localizar un error
sintáctico en el mismo instante que se produce con lo que se adquiere una
gran eficiencia
de tiempo de compilación frente a procedimientos menos adecuados como
puedan ser los
de retroceso
Funcionalmente hablando, un analizador LR consta de dos partes
diferenciadas, un programa de proceso y una tabla del análisis.
El programa de proceso posee como veremos seguidamente un
funcionamiento muy simple y permanece invariable de analizador a
analizador. Según sea la gramática a procesar deberá variarse el contenido
de la tabla de análisis que es la que identifica plenamente al analizador