Documente Academic
Documente Profesional
Documente Cultură
No debe retrasar el procesamiento de programas sin errores No generar errores en cascada (ej. eliminar identificador)
Acciones posibles
Detectar errores Informar de los errores Recuperar de los errores Corregir errores
Tipos de Errores
Tipos de errores
Lxicos: escribir mal un identificador, nmero, Sintcticos: no poner un ; al final de una sentencia, estructura incorrecta Semnticos: multiplicar por una variable booleana Lgicos: bucle infinito
Sintcticos
Si se utiliza algn editor basado en sintaxis (colores)
Semnticos
Busca funciones/clases e indica tipos especificados
3
Tabla:
N
S A
a aAS
b bA
c cA
d d
Errores en Anlisis LR
Ejemplo 2: anlisis ascendente Gramtica 1. S::=A A 2. A::=x A 3. A::=y Entrada: xy
x 0 1 2 3 4 5 6 d3 d3 r3 r1 r2 r2 r2 d4 d4 r3 r3 d3
accin ir_a
y d4
$ acpt
S 1 5 6
A 2
6 7 8
Entrada $ $ $
Estrategias de Recuperacin
No hay una estrategia de aceptacin universal
Abundan tcnicas heursticas y ad hoc
Modo de Pnico
Caractersticas
Mtodo ms sencillo Lo pueden usar la mayora de los AS No entra en lazos infinitos Adecuado para lenguajes en los que son raros mltiples errores en la misma proposicin
Funcionamiento general
El AS desecha smbolos de la entrada, uno por uno, hasta encontrar un token de sincronizacin para continuar
Delimitadores (punto y coma, palabras clave como end)
Inconvenientes
Podran omitirse gran cantidad de smbolos sin analizar
A nivel de frase
Caractersticas
Correcciones en la cadena de entrada
Funcionamiento
Descubierto el error se corrige (localmente) la entrada por un prefijo que permite continuar el AS
Sustituir una coma por un punto y coma, insertar un punto y coma, etc.
Inconvenientes
Dificultad para resolver situaciones en las que el error se produjo antes de la deteccin de ste Pueden producir lazos infinitos
Evitar insertar smbolos antes del smbolo actual en la entrada
Producciones de error
Funcionamiento
Conocidos los errores ms comunes, se extiende la gramtica con producciones de error Reconocido el error, se dan diagnsticos precisos de la construccin errnea Ej.:
E->E op T | E->T E-> E T //falta operador T->id | num
Inconvenientes
Dificultad para ir ms all de los casos particulares ms frecuentes Generacin ambigedades
9
Correccin Global
Caractersticas
Algoritmos que eligen una secuencia mnima de cambios para obtener una correccin global de menor costo Ej.: x=a(p+q(-b(r-s); -> a(p+q)-b(r-s); ifa=b then sum=0; -> if a =b then sum=0;
Inconvenientes
Tcnicas costosas en tiempo y espacio: mtricas de distancias, bsqueda, optimizacin,
10
Recuperacin
Modo pnico
Si no encuentra token apropiado, buscar hasta tokens de sincronizacin Calcular los tokens de sincronizacin apropiados en cada situacin
Conjunto siguiente del no terminal Conjunto primero, despus
11
Procedure B() { if (token= i) { scan(); if (token in [igual, noigual]) scan(); else error(); if (token == i) then scan else error; } elseif (token in [true, false]) scan(); else error(); } Procedure Main() { S(); if (token!=$) error }
12
SIGUIENTE(B)= {then, $} Procedure B(sync) { buscarSinc({i, true, false}, sync); if (not token in {i, true, false}) return; if (token= i) { scan(); if (token in {igual, noigual}) scan(); Procedure buscarSinc if (token == i) scan(); } (PRIM,SIG) elseif (token in {true, false}) { scan(); if (not token in PRIM){ buscarSinc(sync, {}); mensajeError(); } avanzar(PRIM U SIG);} } Procedure Main() Procedure avanzar(A) { { S({$, if, write, i}); while not (token in A){ if (token!=$) error(); scan(); } } 13 }
PRIMERO(S)= {if, write, i} PRIMERO(B)= {i,true, false} SIGUIENTE(S)= {$} SIGUIENTE(B)= {then, $} Procedure B(sync) { buscarSinc({i, true, false}, sync); if (not token in {i, true, false}) return; if (token= i) { scan(); if (token in {igual, noigual}) scan(); Procedure buscarSinc if (token == i) scan(); } (PRIM,SIG) elseif (token in {true, false}) { scan(); if (not token in PRIM){ buscarSinc(sync, {}); mensajeError(); } avanzar(PRIM U SIG);} } Procedure Main() Procedure avanzar(A) { { S({$, if, write, i}); while not (token in A){ if (token!=$) error(); scan(); } } 14 }
Recuperacin
Modo pnico
La eficacia de esta estrategia depende de la eleccin del conjunto de tokens de sincronizacin La eleccin debe ser tal que el AS se recupere rpidamente de los errores ms comunes
15
Recuperacin en AS LL(1)
Heursticas para modo pnico
Colocar todos los smbolos de SIGUIENTE(A) en el conjunto de sincronizacin de A Saltar tokens hasta encontrar uno en SIGUIENTE(A) y sacar A de la pila, es probable que el AS pueda seguir
Accin especial si se vaca la pila: poner S y saltar hasta PRIMERO(S)
Aadir los smbolos de PRIMERO(A) al conjunto de sincronizacin de A, el AS contina con A si aparece un token de PRIMERO(A) Aadir al conjunto de sincronizacin tokens de inicio de bloques de una jerarqua superior (bloques, sent, exp, ) 16 Si PRIMERO( ) d i i l
Recuperacin AS LL(1)
Modo Pnico Ejemplo:
E E T T F TE +TE | FT *FT | (E) | id + N Primero Siguiente E {(,id} {),$} E {+,} T F * scan scan ext T {*,} {),$} {+,),$} {(,id} {+,),$} {(,id} {+,*),$} ( ) $
E+TE scan
ETE ext ext scan E E TFT ext F(E) ext ext ext T T
17
T*FT scan
Recuperacin AS LL(1)
Ejemplo entrada:
)id*+id
id E T F E scan
ETE scan
E+TE scan
Recuperacin AS LL(1)
A nivel de frase
Se llenan las entradas en blanco de la tabla con llamadas a rutinas de error
Las rutinas insertan, cambian o eliminan smbolos de la entrada y emiten mensajes de error Pueden sacar elementos de la pila
19
Insertar $ al principio y al final de la cadena de entrada Insertar las relaciones de precedencia en la cadena de entrada Mientras entrada$S$ hacer Recorrer entrada desde la izquierda hasta encontrar > Buscar a la izquierda, a partir de ese punto, el primer < Reducir el pivote que se encuentra en el medio, incluyendo no terminales adyacentes Reinsertar las relaciones de precedencia, ignorando los no terminales
20
Algoritmo
Hay dos situaciones en las que un AS por precedencia descubre errores sintcticos:
Encontrado el pivote, no existe ninguna produccin que reducir
Para reducir hay que decidir que regla de produccin se asemeja ms al pivote
Para casos sencillos pueden enumerarse todos los casos de cada produccin. Ej.: aritmtica
si +,* se reduce y no hay no terminales a los lados: falta operando Si id se reduce y no hay no terminal a un lado: falta operador Si () se reduce si no terminal en medio: falta expresin
Para reducir hay que decidir que regla de produccin se asemeja ms al pivote Una posibilidad es modificarlo, eliminando o insertando smbolos hasta encontrar produccin ms parecida Ej.: A-> a E c encontrado: aac < a == a == c > modificar a aEc < a == c > a ilegal en lnea falta E en lnea
22
id id ( ) $ + *
) >
> > > < < > > > < < > > < > > >
23
< < == > < < < < < < > >
E E+E | E-E | E*E | E/E | EE | (E) | -E | id id id ( ) $ + * e3 < e3 < < < ( e3 < e3 < < < ) > == > e2 > > $ > e4 > e1 > > + > < > < > > * > < > < < >
Ej.: id + )
24
Recuperacin AS LR(1)
Deteccin del error
Al consultar la tabla de acciones del AS y la entrada es de error
Deteccin ms rpida que otros analizadores: propiedad del prefijo viable
E ( 0 1 2 d5 d2
accin
ir_a
a d2
$ acpt r2
A 1
a d3
$ acpt
A 1 4
d6 r2 d7
3 4 5 6 7 8 9 d9 r1 d5 d6 r2
8 r1
26
Recuperacin AS LR(1)
Recuperacin LR en modo pnico
Procedimiento heurstico que pretende:
Identificar una construccin en proceso de ser reconocida cuando aparece el error Determinar la posicin en la entrada para continuar
Algoritmo
Se examina la pila hasta encontrar un estado s con valor de ir_a no vaco: al menos para un smbolo no terminal A Se desechan smbolos de la entrada hasta encontrar un terminal a vlido para seguir al no terminal A (accin no vaca) Poner en la pila el estado de ir_a[s,A] y sigue el anlisis sintctico
27
Recuperacin AS LR(1)
A nivel de frase
Se construyen procedimientos de recuperacin que modifiquen la pila y/o la entrada dependiendo del error Los procedimientos de recuperacin eliminarn o desplazarn al menos un smbolo de la entrada o reducirn la pila si la entrada ha sido procesada (evitar bucles infinitos) No extraer de la pila estados que alcancen un no terminal (estaremos extrayendo construcciones correctamente examinadas) Para evitar excesivos mensajes de error se puede extender, en los estados en los que las reducciones son siempre al mismo estado, la reduccin a las entradas en blanco (los errores se detectarn ahora al desplazar)
28
Recuperacin AS LR(1)
A nivel de frase Ejemplo: id+)
E E+E|E*E|(E)|id
e1: se esperaba un operando id ( pero se encontr operador o final
introducir id en la pila y estado 3 mostrar falta operando accin ir_a
id 0 1 2 3 4 5 6 7 8 9 d3 e3 d3 r4 d3 d3 e3 r1 r2 r3
+ d4 r4
$ e1 acpt e1 r4 e1 e1 e4 r1 r2 r3
E 1 6 7 8
e1 e1 d2 e2 d5 e3 e2 r4 r4 r4 e1 e1 d2 e2 e1 e1 d2 e2 e1 e1 d2 e2 d4 r1 r2 r3 d5 e3 d9 d5 r2 r3 r1 r2 r3 r1 r2 r3
Conj. LR(0)
(
I2:
( E )
e1
Id
e2
I6:
I9:
[E(E) ]
I0:
e1
Id
I3: I4:
e3
E + * + E
e4
[EId]
I7:
[EE+E] [EE+ E] [EE * E] [E(E)] [EId] [EE *E] [EE+ E] [EE * E] [E(E)] [EId]
I8:
I1:
e1
*
e3
I5:
e1
Objetivos
Informar con claridad, exactitud y extensin Evitar errores en cascada y procesos infinitos
Analizadores LL y LR gran capacidad para estrategias en modo pnico y frase en funcin del contexto
31