Issuu on Google+

PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE-IBARRA FRANCISCO YEPEZ

COMPILADORES EL PAPEL DEL ANALIZADOR SINTÁCTICO En este modelo de compilador, el analizador sintáctico obtiene una cadena de componentes léxicos del analizador léxico, y comprueba si la cadena puede ser generada por la gramática del lenguaje fuente. Se supone que el analizador sintáctico informará de cualquier error de sintaxis de manera inteligible. También debería recuperarse de los errores que ocurren frecuentemente para poder continuar procesando el resto de su entrada. Los métodos empleados generalmente en los compiladores se clasifican como descendentes o ascendentes.

ANALIZADOR SINTÁCTICO ASCENDENTE Y DESCENDENTE ANÁLISIS SINTÁCTICO DESCENDENTE En éste analizador las entradas son de izquierda a derecha, y construcciones de derivaciones por la izquierda de una sentencia o enunciado. CARÁCTERISTICAS 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. Parte del axioma de la gramática. Procesa la entrada de izquierda a derecha. Escoge reglas gramaticales. 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)).

TRATAMIENTO DE ERRORES Corrección de errores: exige que el programa pueda ejecutarse. Suele utilizarse en sistemas que generan .EXE directamente, pues ahorra tiempo (permite encontrar errores de ejecución a la vez que los de compilación). Recuperación de errores: sólo trata de evitar que el número de mensajes de error sea demasiado grande y que el compilador/intérprete pueda seguir ejecutándose correctamente en instrucciones sucesivas.

Corrección ortográfica Errores ortográficos típicos:


Corrección de errores sintácticos Si se detecta al analizar la cadena xUy Donde x,y en A* y U en A es el próximo símbolo a analizar, podemos intentar lo siguiente:

poniendo z en la pila (si es análisis bottom-up). a asociada.

Recuperación de errores de compilación Conviene tener una sola rutina de recuperación de errores separada del resto del compilador. Evitar que un solo error produzca varios mensajes. Ejemplo: A[i1,i2,...,i3], donde A no es un "array". Al abrir el corchete nos dará un error: "A no es un array". Al cerrar el corchete podría dar otro: "El número de índices no coincide con el rango de A". Si se ha dado el primero, el segundo es innecesario. Una solución: detectado el primer error, se sustituye la referencia a A por una referencia a un identificador "fantasma". La rutina de recuperación de errores podría ignorar los mensajes que se refieren al identificador fantasma Recuperación de errores en un intérprete Hay que señalar el error y detener la ejecución, permitiendo al programador

Y asegurarse de que todo sigue correctamente. En lenguaje simbólico se puede manipular la pila de ejecución, salir automáticamente de rutinas pendientes, sin continuar la ejecución, etc.

ÁRBOLES SINTÁCTICOS Árbol sintáctico, para una oración compuesta (el niño que me saludó me odia) en la que la oración subordinada es una oración de relativo. Dada una oración o construcción compleja esta puede dividirse en constituyentes sintácticos, cada uno de los cuales a su vez podría ser divisible o analizable en otros constituyentes. El conjunto de constituyentes sintácticos admite con la relación binaria de inclusión (o "ser parte de") es un conjunto parcialmente ordenado. Un árbol sintáctico es


una representación de las relaciones jerárquicas entre los constituyentes sintácticos. Más formalmente, un árbol sintáctico es una grafo que representa esta relación de orden parcial. Cuando en una construcción un constituyente X es parte de un constituyente inmediato de otro constitiyente más grande Y, el árbol sintáctico correspondiente tendrá una línea entre el nodo que representa a X y en nodo que representa a Y. Actualmente se acepta que toda lengua admite una análisis mediante árboles sintácticos binarios. En los árboles gráficos los núcleos sintácticos se suelen representar con una letra, por ejemplo X, seguida de un subíndice (por ejemplo ), mientras que las estructuras más complejas se señalan mediante una o dos barras superpuestas o mediante primas (por ejemplo, ) y si se trata de proyecciones máximas de un núcleo mediante la letras S antecediendo a la letra que designa al núcleo (por ejemplo SX)


ejercicio