viernes, 17 de junio de 2016

Manejo de errores.



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.

La detección y recuperación de errores en un compilador se centra en la fase de análisis sintáctico. Una razón es que muchos errores son de naturaleza sintáctica o se manifiestan cuando la cadena de componentes léxicos que proviene del analizador léxico desobedece las reglas gramaticales que definen al lenguaje de programación. Los métodos modernos de análisis sintácticos, que pueden detectar la presencia de errores dentro de los programas de una forma muy eficiente. La detección exacta de la presencia de errores semánticos y lógicos en el momento de la compilación es mucho más fácil.

El manejador de errores en un analizador sintáctico tiene objetivos fáciles de establecer:
·              -Debe de informar de la presencia de errores con claridad y exactitud.
·               -Se debe de recuperar de cada error con la suficiente rapidez como para detectar errores posteriores.
    -No debe retrasar de manera significativa el procesamiento de programas correctos.
 
Un error de puntuación frecuente es usar un coma en lugar del punto y como en la lista de argumentos de una declaración de función (por ejemplo, usar una coma en lugar del primer punto y coma en la línea (4)); otro es no poner un punto y coma obligatorio final de una línea (por ejemplo, el punto y como del final de la línea (4); otro es poner un punto y coma indebido al final de una línea antes de un else (por ejemplo, poner un punto y coma final de la línea(7)).

Estrategias de recuperación de errores:

En modo pánico: Al descubrir un error, el analizador sintáctico desecha los símbolos de entrada, de uno en uno, hasta que encuentre uno perteneciente a un conjunto designado de componente léxicos de sincronización.

Recuperación a nivel de frase: Al descubrir un error, el analizador sintáctico puede realizar una corrección local de la entrada restante; es decir que puede un prefijo de la entrada restante por alguna cadena que permite continuar el analizador sintáctico.

Producciones de errores: Si el analizador sintáctico usa una producción de error, se pueden generar diagnósticos de error apropiados para indicar la construcción errónea reconocida en la entrada.

Corrección global: Dada una cadena de entrada incorrecta X  y la gramática G, estos algoritmos encontraran un árbol de análisis sintáctico para una cadena relacionada, tal que el número de inserciones, supresiones y modificaciones de componentes léxico necesarios para transformar X en Y, sea el mínimo posible.