1. Trabajo de Compiladores
Nombre: Alexander Echeverría
Nivel: 5to Sistemas
Fecha: 08-05-2014
Analizador Sintáctico
El Papel del Analizador Sintáctico
El papel del analizador sintáctico Todo lenguaje de programación tiene reglas que describen la
estructura sintáctica de programas bien formados. En Pascal, por ejemplo, un programa se
compone de bloques, un bloque de proposiciones, una proposición de expresiones, una
expresión de componentes léxicos, y así sucesivamente. Se puede describir la sintaxis de las
construcciones de los lenguajes de programación por medio de gramáticas de contexto libre o
notación BNF (Backus-Naur Form).Las gramáticas ofrecen ventajas significativas a los
diseñadores de lenguajes y a los desarrolladores de compiladores. 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.
Análisis Sintáctico Ascendente y descendente
Análisis Sintáctico descendente
El análisis sintáctico descendente (ASD) intenta encontrar entre las producciones de la
gramática la derivación por la izquierda del símbolo inicial para una cadena de entrada. (Top-
Down-Parser): un analizador puede empezar con el símbolo inicial e intentar transformarlo en
la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada
vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC.
El análisis sintáctico descendente (ASD) intenta encontrar entre las producciones de la
gramática la derivación por la izquierda del símbolo inicial para una cadena de entrada.
Análisis sintáctico descendente.
Partir del axioma de la gramática.
Escoger reglas gramaticales.
Hacer derivaciones por la izquierda.
Procesar la entrada de izquierda a derecha.
Obtener el árbol de análisis sintáctico o error
2. Análisis Sintáctico Ascendente
El objetivo de un análisis ascendente consiste en construir el árbol sintáctico desde abajo hacia
arriba, esto es, desde los tokens hacia el axioma inicial, lo cual disminuye el número de reglas
mal aplicadas con respecto al caso descendente (si hablamos del caso con retroceso) o amplía
el número de gramáticas susceptibles de ser analizadas (si hablamos del caso LL(1)).Tanto si
hay retroceso como si no, en un momento dado, la cadena de entrada estará dividida en dos
partes, denominadas α y β:
β: representa el trozo de la cadena de entrada (secuencia de tokens ) por consumir: β Є T*
Coincidirá siempre con algún trozo de la parte derecha de la cadena de entrada. Como puede
suponerse, inicialmenteβ coincide con la cadena a reconocer al completo (incluido el EOF del
final).
α: coincidirá siempre con el resto de la cadena de entrada, trozo al que se habrán aplicado
algunas reglas de producción en sentido inverso: α Є(N U T)*
Se construye el árbol de análisis sintáctico de la cadena de entrada desde las hojas hasta la
raíz. En las hojas tenemos la cadena a analizar (los símbolos terminales) que se intentan
reducir al axioma, que se encontrar en la raíz, si la cadena es correcta sintácticamente.
3. Análisis semántico y tratamiento de errores
Los errores encontrados en las distintas fases de análisis se envían a un módulo de nominado
manejo de errores. En el caso más sencillo puede ser un subprograma al que se le invoca
enviándole el código de error, y que se encarga de escribir un mensaje con el error
correspondiente, y el número de línea donde se ha producido, así como de cortar el proceso
de traducción.
TIPOS DE ERRORES
Tipos de errores que suelen ocurrir (dependiendo de la fase):
Léxicos: No concuerda con ninguna ER.
Ejemplo: escribir mal una palabra clave Sintácticos: La estructura que se ha seguido no es
correcta. Ejemplo: expresión con paréntesis no emparejados Semánticos: La estructura está
bien pero hay errores de significado. Ejemplo: operador y operandos incompatibles.
Lógicos: Árboles
Sintácticos Es una clase especial de árbol, se le denomina Árbol Sintáctico es una forma
condensada de un árbol de análisis sintáctico, útil para representar instrucciones de lenguajes.
Un árbol sintáctico permite demostrar que una secuencia de caracteres es una determinada
4. categoría sintáctica. Llevan su nombre en base a la función que cumple, donde cada nodo
representa una operación y los hijos de un nodo son los argumentos de la operación.
Árboles Sintácticos