调试ANTLR4语法

时间:2013-01-24 16:31:16

标签: antlr4

我是ANTLR的一个n00b,并试图在ANTLR4中运行ASN.1解析器。我现在处于这样的阶段,我正在输入一个输入文件,并且看到错误,例如“第1行:12029在输入时没有可行的替代方案......”

我正在尝试将此问题与我的规则中的某些问题联系起来,但通过字符数定位违规输入是一项挑战。 ANTLR解析器将输入视为单行是正常的,还是因为规则问题而无法识别EOL(我在OSX系统上)?如果将输入看作一条长线是正常的,有人可以推荐一种工具来定位文件中的给定字符位置吗?

1 个答案:

答案 0 :(得分:3)

您的代码是否仅使用\r行结尾? ANTLR 4增加行数并仅在消耗\n个字符时重置char位置。如果您需要处理纯\r行结尾,则需要覆盖LexerATNSimulator.consume才能执行此检查。

检查完整的行结尾集合 比单独检查\n更加昂贵,因此由于\r行结尾很少,所以默认实现使用{{1为了获得最佳性能。