如何在Antlr 4/c中控制错误处理和同步#

Ang*_*gie 2 grammar antlr antlr4

我正在使用带有c#目标的Antlr 4.这是我的语法的一个子集:

/*
 * Parser Rules
 */
text : term+  EOF;
term : a1 a2 a3;
a1: ....
...
...
Run Code Online (Sandbox Code Playgroud)

我想接受有效数据块作为(term)s,当出现错误时我想搜索下一个有效术语并打印出导致错误的整个文本,供用户手动分析.

如何将输入同步到下一个有效期限?以及如何获取被忽略的文本?

Sam*_*ell 5

您需要为此创建自己的实现IAntlrErrorStrategy,然后将该Parser.ErrorHandler属性设置为错误策略的实例.Java版本的ANTLRErrorStrategy接口和默认实现的文档DefaultErrorStrategy可能为实现错误策略提供了有用的信息,但我必须警告您,创建自定义错误策略是一种具有有限文档的高级功能.预计实施者已经是ANTLR 4实现自适应LL(*)解析算法的专家(我们正在谈论研究者级别的理解).