我刚刚开始使用 ANTLR4,并且正在创建一个遍历解析树的侦听器。我还有一个自定义错误侦听器添加了Parser
实例;在此基础上,我希望在调用期间报告的任何错误ParseTreeWalker.walk()
也转到解析器的错误侦听器。我突然想到我可以调用Parser.getErrorListeners()
并将它注入到我的侦听器类中,但我希望有一些更成熟的东西。
当我这样做时,我需要一种在报告错误时确定给定节点的行号和列号的方法。在报告听众或访问者发现的错误时,每个人都会自己动手吗?
我刚刚开始使用 ANTLR4,并且正在创建一个遍历解析树的侦听器。我还有一个自定义错误侦听器添加了Parser
实例;在此基础上,我希望在调用期间报告的任何错误ParseTreeWalker.walk()
也转到解析器的错误侦听器。我突然想到我可以调用Parser.getErrorListeners()
并将它注入到我的侦听器类中,但我希望有一些更成熟的东西。
当我这样做时,我需要一种在报告错误时确定给定节点的行号和列号的方法。在报告听众或访问者发现的错误时,每个人都会自己动手吗?
你可以打电话Parser.notifyErrorListeners
。
行号和列号可通过调用Token.getLine()
和获得Token.getCharPositionInLine()
。您可以通过调用来检索与解析树中的Token
任何关联的实例。TerminalNode
TerminalNode.getSymbol()