我是ANTLR的一个n00b,并试图在ANTLR4中运行ASN.1解析器。我现在处于这样的阶段,我正在输入一个输入文件,并且看到错误,例如“第1行:12029在输入时没有可行的替代方案......”
我正在尝试将此问题与我的规则中的某些问题联系起来,但通过字符数定位违规输入是一项挑战。 ANTLR解析器将输入视为单行是正常的,还是因为规则问题而无法识别EOL(我在OSX系统上)?如果将输入看作一条长线是正常的,有人可以推荐一种工具来定位文件中的给定字符位置吗?
答案 0 :(得分:3)
您的代码是否仅使用\r
行结尾? ANTLR 4增加行数并仅在消耗\n
个字符时重置char位置。如果您需要处理纯\r
行结尾,则需要覆盖LexerATNSimulator.consume
才能执行此检查。
检查完整的行结尾集合 比单独检查\n
更加昂贵,因此由于\r
行结尾很少,所以默认实现使用{{1为了获得最佳性能。