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