Sei sulla pagina 1di 18

Teora de lenguajes y compiladores

Unidad II

Analizador Sintctico

Semana 10

Errores Sintcticos

Objetivo General
El alumno al finalizar el curso desarrollar
aplicaciones que le permitan determinar si
una sentencia corresponde a la estructura
gramatical
de
un
lenguaje
de
programacin.
As
mismo
estar
capacitado para proponer nuevas formas
estructurales en la definicin de lenguajes
de programacin.

Objetivo Especfico

Desarrollar un analizador sintctico

Objetivo Instruccional
Implementa procedimientos para el
tratamiento de errores sintcticos

Contenidos Procedimentales
Implementa procedimientos para el
tratamiento de errores sintcticos

Contenidos

Generalidades
Recuperacin de errores en analizadores
sintcticos descendentes recursivos
Recuperacin de errores en analizadores
sintcticos LL(1)

Generalidades

Algunas consideraciones
1. Un analizador sintctico debera intentar
determinar que ha ocurrido un error tan pronto
como fuera posible. Esperar demasiado tiempo
antes de la declaracin del error significa que la
ubicacin del error puede haberse perdido.
2. Despus de que se ha presentado un error, el
analizador sintctico deber seleccionar un lugar
probable para reanudar el anlisis. Un analizador
sintctico siempre debera intentar analizar tanto
cdigo como fuera posible, a fin de encontrar
tantos errores reales como sea posible durante
una traduccin simple.

Generalidades

Otras consideraciones
3. Un analizador sintctico debera intentar evitar
el problema de cascada de errores, en la cual
un error genera una secuencia de mensajes de
error falsos.
4. Un analizador sintctico debe evitar bucles
infinitos en los errores, en los que se genera una
cascada sin fin de mensajes de error sin
consumir ninguna entrada.

Generalidades

Tipos de Errores

Lxicos
Sintcticos
Semnticos
Lgicos

(a!b, begon)
(X := a *(b-(c+d);;)
(3 div sqrt(2))
(bucle infinito)

Consideraciones:
La mayora de los errores son simples
La mayora son o se manifiestan en la fase de
anlisis sintctico
La deteccin de errores lgicos es muy difcil o
imposible
A veces el error est mucho antes de que se
pueda detectar

Objetivos del gestor de errores

Generalidades

Informar con claridad y exactitud


lnea, posicin, mensajes (falta un ;)

Recuperarse con rapidez


No se abandona al primer error
Introduccin de errores espurios (sintcticos o
semnticos): inhibir mensajes de demasiado
cercanos
Se abandona si hay muchos errores

No retrasar significativamente la
traduccin de programas correctos
Mecanismos sencillos de recuperacin

Estrategias para la gestin de


errores

Generalidades

En modo pnico: descartar smbolos de entrada

(hasta que alguno permita la recuperacin: elementos de


sincronizacin)

A nivel de frase: correccin local segn el error


concreto (borrar, sustituir, insertar: peligro de bucle infinito)

De producciones de error: prever errores (frecuentes


o probables) ampliando la gramtica con reglas
especficas de error
De correccin global: hallar el programa correcto
ms cercano al de entrada: costoso y no
necesariamente se encuentra el deseado

Recuperacin de errores en analizadores


sintcticos descendentes recursivos

Modo de Alarma
En situaciones complejas, el manejador de
errores consumir un numero posible
grande de tokens en un intento de hallar
un lugar para reanudar el anlisis
sintctico.
Este modo de alarma tiene, adems, la
ventaja de que virtualmente asegura que
el analizador sintctico no caiga en un
bucle infinito durante la recuperacin de
errores.

Recuperacin de errores en analizadores


sintcticos descendentes recursivos

Mecanismo del Modo de


Alarma
El mecanismo bsico es proporcionar a
cada
procedimiento
recursivo
un
parmetro extra compuesto de un
conjunto de tokens de sincronizacin.
Si se encuentra un error, el analizador
sintctico
explora
hacia
delante,
desechando los tokens hasta que ve en la
entrada uno del conjunto de tokens de
sincronizacin, en donde se reanuda el
anlisis sintctico.

Recuperacin de errores en analizadores


sintcticos descendentes recursivos

Mecanismo del Modo de


Alarma
Las decisiones importantes que se tienen que
tomar en este modo de recuperacin de errores
consisten en determinar que tokens agregar al
conjunto de sincronizacin en cada punto del
anlisis sintctico.
Por lo general los conjuntos siguiente son
candidatos importantes para tales tokens de
sincronizacin. Los conjuntos primero tambin se
pueden utilizar para evitar que el manejador de
errores omita tokens importantes que inicien
nuevas construcciones principales (sentencias o
expresiones).

Recuperacin de errores en analizadores


sintcticos descendentes recursivos

Mecanismo del Modo de


Alarma
Es importante darse cuenta que el modo de
alarma funciona mejor cuando el compilador
sabe cuando no alarmarse.
Por ejemplo, los smbolos de puntuacin perdidos,
tales como los de punto y coma, y las comas, e
incluso los parntesis derechos olvidados, no
siempre deberan provocar que un manejador de
errores consuma tokens. Naturalmente, debe
tener cuidado para asegurar que no se presente
un bucle infinito.

Recuperacin de errores en analizadores


sintcticos LL(1)

1. La recuperacin de errores en modo de


alarma se puede implementar en
analizadores sintcticos LL(1) de manera
semejante a como se implementaron en
el anlisis sintctico recursivo.
2. Se advierte que la situacin de error se
da cuando un no terminal A esta en la
parte superior de la pila y el token de
entrada actual no esta en primero(A) (o
siguiente(A); si esta en Primero(A)).

Recuperacin de errores en analizadores


sintcticos LL(1)

3. Si se esta en el caso expuesto


anteriormente se tienen tres alternativas
posibles de recuperacin:
i. Extraer A de la pila
ii. Extraer de manera sucesiva tokens de
la entrada hasta que se vea un token
para el cual se pueda reiniciar el
anlisis sintctico
iii. Insertar un nuevo no terminal en la
pila.

Teora de lenguajes y compiladores


Unidad II

Analizador Sintctico

Semana 10

Errores Sintcticos

Potrebbero piacerti anche