Antlr 4错误恢复

Antlr 4错误恢复,antlr,antlr4,Antlr,Antlr4,我的脚本语言包含一系列宏,规则定义如下 program : macrodeclaration* EOF ; macrodeclaration : (STATIC)? 'MACRO' STRING declareparameter statement* 'ENDMACRO' ; 有时我将endmacro错误地键入为endmacros,解析器会吞噬标记“endmacros”,忽略下一个宏定义,继续搜索下一个endmacros。它吐出了那么多不可行的替代错误 我想知道如何调

我的脚本语言包含一系列宏,规则定义如下

program
:   macrodeclaration* EOF
;

macrodeclaration
:   (STATIC)? 'MACRO' STRING declareparameter
    statement*
    'ENDMACRO'
;
有时我将endmacro错误地键入为endmacros,解析器会吞噬标记“endmacros”,忽略下一个宏定义,继续搜索下一个endmacros。它吐出了那么多不可行的替代错误

我想知道如何调整错误恢复,将输入错误的endmacro视为endmacro,从而只报告一个错误并正确解析下一个宏


请提供帮助。

错误恢复是一个棘手的问题。您总是可以添加一个新的令牌
ENDMACROS
,并在末尾允许它,但是如果用户写入
ENDMCRO
ENDMACROS
,或者仅仅是
end
,会发生什么呢?或者,如果他们在其他地方使用
ENDMACROS
作为标识符,会发生什么

目前的结果如下:

  • ANTLR 4为正确的输入返回正确的答案(实际上,还有一些已知的遗留错误,但目标始终是达到这一点)
  • 没有人实施并提交更好的广义错误恢复策略,作为对项目的拉动请求,这不会对正确输入的性能产生负面影响
  • 除非您计划设计和实现一个通用的错误恢复策略,否则最好的选择可能是为解析阶段完成之前发生的错误添加某种过滤器。对于语义分析期间发生的错误(使用访问者/步行者等),您可以在停止之前报告更多错误