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.