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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top