Upload
carlos-brusil
View
150
Download
1
Embed Size (px)
Citation preview
PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR SEDE IBARRA
Nombre: Carlos Brusil
Escuela: Ingeniería
Materia: Compiladores
Tema: Análisis sintáctico
1.- Las funciones que cumple el analizador sintáctico.
En el modelo del 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 programa fuente.
Esta iteración se esquematiza como sigue:
Existen 2 tipos generales de analizadores sintácticos para gramáticas:
a) Análisis sintáctico descendente. Construye árboles de análisis sintáctico desde arriba
(raíz) hacia abajo (hojas). El análisis se realiza de lo general a lo particular.
b) Análisis sintáctico ascendente. Construyen árboles de análisis sintáctico comenzando
en las hojas y suben hacia la raíz. El análisis se realiza de lo particular a lo general.
2.- Tipos de errores sintácticos
7.1 Tipos de Errores
¢ Léxicos
¢ Sintácticos
¢ Semánticos
¢ Lógicos
Errores léxicos
Los errores léxicos se detectan cuando el analizador léxico intenta reconocer
componentes léxicos en el código fuente.
Errores sintácticos
Un error de sintaxis se detecta cuando el analizador sintáctico espera un símbolo que no
corresponde al que se acaba de leer. Los analizadores sintácticos LL y LR tienen la
ventaja de que pueden detectar errores sintácticos lo más pronto posible, es decir, se
genera un mensaje de error en cuanto el símbolo analizado no sigue la secuencia de los
símbolos analizados hasta ese momento.
Error semántico
Los errores semánticos corresponden a la semántica del lenguaje de programación, la cual
normalmente no está descrita por la gramática. Los errores semánticos más comunes son
la omisión de declaraciones.
Errores Lógicos
Los comete el programador
Ejemplo: una llamada infinitamente recursiva
Tipos de gramática que acepta un analizador sintáctico.
Árbol sintáctico de una sentencia de lenguaje.
Análisis descendente con retroceso
El método parte del axioma inicial y aplica todas las posibles reglas al no terminal más a
la izquierda.
• Se usa el retroceso para resolver la incertidumbre.
• Sencillo de implementar.
• Muy eficiente.
Ejemplo:
Análisis descendente con recursión. Diagramas de Conway
Análisis descendente de gramáticas LL(1)
Es del tipo LL1 porque empezamos a derivando por la izquierda, y los carácteres son
leidos de izquierda a derecha, el 1 por que se lee 1 solo elemento de entrada.
También se puede considerar como un intento de construir un árbol de análisis
sintáctico para la entrada comenzando desde la raíz y creando los nodos del árbol en
orden previa.
Bueno primeramente para trabajar el análisis sintáctico descendente se debe realizar
primeramente algunas operaciones para que la gramática sea LL1 las cuales son:
– Eliminar Ambiguedad
– Eliminar Recursividad por la Izquierda
– Factorizar
– Primeros y siguientes
Ambigüedad
Una gramática es ambigua cuando genera más de un árbol de derivación.
Para eliminar la ambigüedad se debe reescribir la gramática.
Ejemplo:
Recursividad por la Izquierda
Una gramática es recursiva por la izquierda si tiene un no Terminal A tal que existe una
derivación A->Aα para alguna cadena . Es decir por simple observación podemos
identificar.
Para eliminar la recursividad por la izquierda se utiliza la siguiente formula.
Ejemplo:
Gramática Recursiva
Análisis Ascendente con retroceso
Al igual que ocurría con el caso descendente, este tipo de análisis intenta probar todas las
posibles operaciones (reducciones y desplazamientos) mediante un método de fuerza
bruta, hasta llegar al árbol sintáctico, o bien agotar todas las opciones, en cuyo caso la
cadena se rechaza.
En el análisis con retroceso no se permiten las reglas ԑ, puesto que estas se podrán aplicar
de forma indefinida.