¿Cuál es la estrategia para agregar producciones de error a una gramática?
-
28-10-2019 - |
Pregunta
¿Cómo se agregan las producciones de error típicamente? Me encuentro con el problema de que mis producciones de error son demasiado superficiales: cuando el analizador comienza a aparecer en un error en una declaración, aparece hasta que llega a la producción de errores para la sección en la que se encuentra, e imprime un error inválido mensaje.
¿Es una buena idea agregar una producción de error descriptiva a todos los no terminales?
Solución
Las producciones de errores se tratan de recuperarse de un error para intentar continuar procesando la entrada, no sobre imprimir mensajes de error razonables o útiles. Por lo tanto, deben usarse en puntos de la gramática donde es probable que pueda reconocer y resincronizar la secuencia de entrada correctamente. Por ejemplo, si su lenguaje consiste en una secuencia de construcciones que terminan con ;
personajes, una buena producción de error es algo así como construct: error ';'
, que se recuperará de los errores en un construct
(lo que sea) saltando hacia adelante en la entrada a un ;
e intentando continuar desde allí.
Poner muchas reglas de recuperación de errores es generaly una mala idea, ya que el analizador solo se recuperará a la más cercana, y a menudo son las más globales en el nivel superior que tienen más probabilidades de ser útiles y tratar de usar una granularidad más fina simplemente conducirá A Error Cascades, ya que las reglas de recuperación de errores no pueden resincar con la entrada correctamente.