Upload
ale-lujan-llauri
View
6
Download
1
Embed Size (px)
DESCRIPTION
lenguaje de maquinas y compiladores
Citation preview
Teora de lenguajes y compiladores
Analizador Sintctico
Semana 10
Unidad II
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
Co
nte
nid
os
Generalidades
Recuperacin de errores en analizadores sintcticos descendentes recursivos
Recuperacin de errores en analizadores sintcticos LL(1)
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.
Algunas consideraciones G
en
era
lida
de
s
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.
Otras consideraciones G
en
era
lida
de
s
Tipos de Errores
Lxicos (a!b, begon)
Sintcticos (X := a *(b-(c+d);;)
Semnticos (3 div sqrt(2))
Lgicos (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
Ge
ne
ralid
ad
es
Objetivos del gestor de errores
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
Ge
ne
ralid
ad
es
Estrategias para la gestin de
errores 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
Ge
ne
ralid
ad
es
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.
Modo de Alarma R
ec
up
era
ci
n d
e e
rro
res
en
an
aliz
ad
ore
s
sin
tc
tic
os
de
sce
nd
en
tes
re
cu
rsiv
os
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.
Mecanismo del Modo de
Alarma
Re
cu
pe
rac
in
de
err
ore
s e
n a
na
liza
do
res
sin
tc
tic
os
de
sce
nd
en
tes
re
cu
rsiv
os
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).
Mecanismo del Modo de
Alarma
Re
cu
pe
rac
in
de
err
ore
s e
n a
na
liza
do
res
sin
tc
tic
os
de
sce
nd
en
tes
re
cu
rsiv
os
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.
Mecanismo del Modo de
Alarma
Re
cu
pe
rac
in
de
err
ore
s e
n a
na
liza
do
res
sin
tc
tic
os
de
sce
nd
en
tes
re
cu
rsiv
os
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)).
Re
cu
pe
rac
in
de
err
ore
s e
n a
na
liza
do
res
sin
tc
tic
os
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.
Re
cu
pe
rac
in
de
err
ore
s e
n a
na
liza
do
res
sin
tc
tic
os
LL(1
)
Teora de lenguajes y compiladores
Analizador Sintctico
Semana 10
Unidad II
Errores Sintcticos