Walter Alexander Ajtún Pisquiy Carné: 201208103
Resumen Análisis sintáctico La tarea del analizado sintáctico es determinar la estructura sintáctica de
un programa a partir de los tokens producidos por el analizado léxico, ya sea de
manera explícita o implícita construir un árbol de análisis gramatical o árbol
sintáctico que represente esta estructura. De este modo, se puede ver el
analizador sintáctico como una función que toma como su entrada la secuencia
de tokens producidos por el analizador Léxico y que produce como su salida el
árbol sintáctico.
La implementación de un compilador seria de una manera más sencilla si
solo tuviera que procesar los programas correctos, pero los programadores a
menudo escribir programas incorrectos, y un buen compilador debería ayudar al
programador a identificar y localizar sus errores. Existen diferentes tipos de
errores en programación pueden ser de tipos léxicos, sintácticos, semánticos y
lógicos.
Manejo de errores sintácticos
El manejador de errores de un analizador sintáctico debe tener como
objetivos; indicar los errores de forma clara y precisa, recuperarse del error para
poder seguir examinando la entrada y no ralentizar significativamente la
compilación. Es ideal al momento de crear un compilador tener en mente los
errores que se puedan producir.
Existen varias estrategias para corregir los errores una vez detectados:
Ignorar el problema: Ignora el resto de entradas hasta llegar a una condición de
seguridad.
Para poder reconocer los errores
Corrección Global
Dada una secuencia completa de tokens a ser reconocida, si hay algún error por
el que nos puede reconocer, busca la secuencia completa más parecida que si
se pueda reconocer, en otras palabras el analizador sintáctico le pide toda la
secuencia de tokens al léxico, y lo que hace es devolver lo mas parecido a la
cadena de entrada pero sin errores.
Tipos de gramática que acepta un analizador sintáctico
Se centra más en el análisis sintáctico para lenguajes basados en gramáticas
formales, ya que hacerlo de otra forma hace difícil la comprensión del
compilador, errores de muy difícil localización, como es la ambigüedad en el
reconocimiento de las sentencia.
Walter Alexander Ajtún Pisquiy Carné: 201208103
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.
Derivaciones
Una derivación comienza con un nombre de estructura simple y termina con una
cadena de símbolos de token. En cada etapa de una derivación se hace un
reemplazo simple utilizando una selección de una regla gramatical
Derivación por la izquierda
Es la derivación donde el no terminar de más a la izquierda de cualquier forma
sea la frase se sustituye en cada paso.
Derivación por la derecha o canónica:
Es la derivación donde el no terminal más a la derecha se sustituye en cada paso
Árbol sintáctico de una sentencia de un lenguaje
Es una representación que se utiliza para describir el proceso de derivación de
dicha sentencia. Como nodos internos del árbol, se sitúan los elementos no
terminales de reglas de producción que se hayan aplicado.
Ambigüedad
Una gramática suele ser ambigua si derivando de forma diferente con el mismo
tipo de derivación se llega al mismo resutado.
Ejemplo: Considérese la gramática
E -> E + E
E ->E * E
E ->( E )
E ->id | num
Forma secuencial: Es cualquier secuencia de terminales y no terminales
obtenida mediante derivaciones a partir del axioma inicial.
Tipos de Análisis
Se desprender dos tipos o clases de analizadores sintácticos al construir el árbol
sintáctico, los cuales son los siguientes:
Descendentes
Walter Alexander Ajtún Pisquiy Carné: 201208103
Estos parten del axioma inicial, y van efectuando derivaciones a la izquierda
hasta obtener la secuencia de derivaciones que reconoce a la sentencia.
Pueden ser:
Con retroceso
Con recursión
Ascendentes
Estas parten de la sentencia de entrada, y van aplicando reglas de producción
hacia atrás, hasta llegar al axioma inicial.
Pueden ser
Con retroceso
LR(1)
Análisis descendente con retroceso
Este método parte del axioma inicial y aplica todas las posibilidades reglas al no
terminal más a la izquierda.
Problemas
Este método no funciona con gramáticas recursivas a la izquierda, ya que puede
ocurrir entre en un bucle infinito.
No existen muchos analizadores sintácticos con retroceso.
Análisis descendente con recursión
Las reglas gramaticales libres de contexto determinan el conjunto de cadenas
sintácticamente legales de símbolos de token para las estructuras definidas por
las reglas, también expresan un lenguaje al igual que puede hacerlo la notación
BNF, y los diagramas de Conway.
Conway: Un diagrama de Conway es un grafo dirigido donde los elementos no
terminales aparecen como rectángulos, y los terminales como círculos.
Análisis descendente de gramáticas LL(1)
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 Conwayes 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
tokenactual.-Unapila de símbolos( terminalesy no terminales)
Top Related