6
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.

Analisis sintactico

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.