【发布时间】:2013-09-13 09:05:31
【问题描述】:
我正在使用 ANTLR4 为某些语言开发一个小型 IDE,当词法分析器无法匹配错误字符时,我需要在错误字符下划线。在这种情况下,内置的 org.antlr.v4.runtime.ANTLRErrorListener 实现会向 stderr 输出一条消息,类似于:
line 35:25 token recognition error at: 'foo\n'
我可以理解如何获取错误的行和列信息(作为参数传递给syntaxError 回调),但是如何在回调中获取'foo\n' 字符串?
当解析器是错误的来源时,它将违规标记作为syntaxError 回调的第二个参数传递,因此提取有关错误输入的开始和停止偏移的信息变得微不足道,这也得到了解释在参考书。但是当源是词法分析器的情况下呢?在这种情况下,回调中的第二个参数为 null,可能是因为词法分析器未能形成标记。
我需要不匹配字符的长度来知道要下划线多少,但是在调试我的侦听器实现时,我无法在提供的回调参数中的任何地方找到此信息(除了通过字符串操作从提供的错误消息中提取它之外,它将是错误的)。 'foo\n' 字符串显然可以通过某种方式获得,那么我错过了什么?
我怀疑我可能看错了地方,我应该考虑扩展 DefaultErrorStrategy 以形成错误消息。
【问题讨论】:
标签: java error-handling antlr4