MANEJO DE ERRORES

Organización de Lenguajes y Compiladores 1 Aura Cifuentes (lucita287)

Ignorar el problema (Panic mode ):
Consiste en ignorar el resto de la entrada hasta llegar a una condición de seguridad. Una condición tal se produce cuando nos encontramos un token especial (por ejemplo un ‘;’ o un ‘END’). A partir de este punto se sigue analizando normalmente

Ignorar el problema (Panic mode):
Un ejemplo de Panic Mode sería desechar los simbolos implicados en el error y salir del error al encontrar punto y coma. Public void metodo1(int a, int b){ a= a+b-t; if (a > b ){ b= b+t b= b-1; } }

Ignorar el problema (Panic mode):
Para un lenguaje que reconoce WHILE, FOR, OPERACIONES, IF , PRINTF definición de variables, para recuperarse al venir otra instrucción. if (a> b) then { b=b-1 X DETECCIÓN DEL ERROR while (b>a) { printf ( “HOLA”); a:= a +1; } if (a == 10) printf (“FIN”); }

Ignorar el problema (Panic mode):
S ::= SLInstrucion; SLInstrucion :: = SLInstrucion Instruccion | Instruccion; Instruccion ::= IF CONDICION THEN NINSTRUCCION |FOR CONDFOR NINSTRUCCION | printf openC TSTRING closeC puntocoma | iden igual E puntocoma | error; NINSTRUCCION ::= openCor SLInstrucion closeCor | Instruccion;

Ignorar el problema (Panic mode):
El error se produjo en este NO TERMINAL

Instruccion ::= IF CONDICION THEN NINSTRUCCION Luego esta misma producción redujo por: NINSTRUCCION ::= openCor SLInstrucion closeCor SLInstrucion produjo una lista de Instrucciones pero encontró error al estar en esta producción: Instruccion ::= iden igual E puntocoma Ahí se recupero al encontrar la terminal while, pero se perdió la instrucción b=b-1. En el caso de no encontrar otra instrucción (obtener el terminal }) no se lograra recuperar del IF. EL ESTADO error PARA ESTE CASO SE USA PARA POSICIONES CRITICAS

Recuperación a nivel de frase:
Intenta recuperar el error una vez descubierto. En el caso anterior, por ejemplo, podría haber sido lo suficientemente inteligente como para insertar el token ‘;’ . Hay que tener cuidado con este método, pues puede dar lugar a recuperaciones infinitas.

Recuperación a nivel de frase:
Para este tipo de error, podemos prever que IF CONDICION INSTRUCCIONES por lo que podemos eliminar la palabra while y componer nuestra gramatica. Public void metodo1(int a, int b){ a= a+b-t; If while (a > b ){ b= b+t; b= b-1; } } SENTENCIA := IF CONDICION INSTRUCCIONES | IF error CONDICION INSTRUCCIONES

Reglas de producción adicionales para el control de errores:
La gramática se puede aumentar con las reglas que reconocen los errores más comunes. Para este ejemplo podemos imaginar, este posible error y agregar acciones a la gramática para solucionarlo.

Reglas de producción adicionales para el control de errores:
a= a+b-t; if (a > b ){ b= b+t b= b-1; } } Posible_error := Sent1 Sent2; Sent1 := sentencia; Sent2 = sentencia PuntoComa;

Corrección Global
Dada una secuencia completa de tokens a ser reconocida, si hay algún error por el que no se puede reconocer, consiste en encontrar la secuencia completa más parecida que sí se pueda reconocer. Es decir, el analizador sintáctico le pide toda la secuencia de tokens al léxico, y lo que hace es devolver lo más parecido a la cadena de entrada pero sin errores, así como el árbol que lo reconoce.

Sign up to vote on this title
UsefulNot useful