1

This seems to be a theoretical question.

As I far as I know ANTLR3 handles errors itself using its recover(###) method. I want to know what the method ANTLR3 uses for error recovery. (i.e. panic-mode/phrase-level etc.) Can someone help me figure this out?

It would be nice if someone can show me the declaration of its recover method, if my first guess is correct. Thank you.

4

1 回答 1

3

引用:

ANTLR 的错误恢复机制基于 Niklaus Wirth 在 Algorithms + Data Structures = Programs 1中的早期想法(以及 Rodney Topor 的 A Note on Error Recovery in Recursive Descent Parsers 2),但也包括 Josef Grosch 从他的 CoCo 解析器生成器(高效递归下降解析器中的舒适错误恢复3)。本质上,识别器在可能的情况下在不匹配符号错误(如稍后所述)时执行单符号插入和删除。如果不是,识别器会吞噬符号,直到前瞻是重新同步集的成员,然后退出规则。重新同步集是一组输入符号,可以合法地遵循对当前规则的引用以及对调用链上任何调用规则的引用。类似地,如果识别器无法从规则的开头选择任何备选方案,则识别器再次使用 gobble-and-exit 策略。

[...]

——特伦斯·帕尔。The Definitive ANTLR Reference,10.7 自动错误恢复策略。

参考

1尼克劳斯·沃斯。算法 + 数据结构 = 程序。Prentice Hall PTR,美国新泽西州上萨德尔河,1978 年。

2罗德尼·W·托波尔。关于递归下降解析器中的错误恢复的说明。SIGPLAN 不是。, 17(2):37-40, 1982。

3约瑟夫·格罗施。递归下降解析器中高效且舒适的错误恢复。结构化编程,11(3):129–140,1990。

于 2012-03-14T20:06:04.250 回答