我正在为使用 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形成错误消息的地方。