Java 如何在ANTLR中接收AltNumber?

Java 如何在ANTLR中接收AltNumber?,java,intellij-idea,antlr,antlr4,Java,Intellij Idea,Antlr,Antlr4,我将使用ANTLR 4.5.3将一种符号转换为另一种符号。我已经使用IntelliJ IDEA中的插件设计了语法描述 在我的语法中,一条规则有几种选择 当我在“Parse Tree”中查看结果时,每个节点都由“rule name”:“row number”组成 如何使用API接收此信息?如果我理解清楚,可以从getAltNumber()检索行号,但该字段为空 在文档中,默认实现既不计算也不存储这个alt num 如何获得这些信息?我遇到了完全相同的问题。文档应该更精确一点,但实际上它提供了一个

我将使用ANTLR 4.5.3将一种符号转换为另一种符号。我已经使用IntelliJ IDEA中的插件设计了语法描述

在我的语法中,一条规则有几种选择

当我在“Parse Tree”中查看结果时,每个节点都由“rule name”:“row number”组成

如何使用API接收此信息?如果我理解清楚,可以从getAltNumber()检索行号,但该字段为空

在文档中,默认实现既不计算也不存储这个alt num


如何获得这些信息?

我遇到了完全相同的问题。文档应该更精确一点,但实际上它提供了一个线索。此外,直接查看插件可能会导致解决方案:

您可以简单地添加一个实现setAltNumber和getAltNumber的上下文超类,如示例所示:

然后提供类作为生成器参数,例如:

antlr4-o输出/path-listener-visitor-DcontextSuperClass=GrammarInterpreterRuleContext-Dlanguage=Java-lib-lib/path-grammar.g4


使用“替代标签”(TDAR第117261页)将是一种更好的方法。否则,
#getAltNumber
doc--FWIW所建议的子类永远不需要这样做。您确定行号表示alt号吗?对我来说,这听起来像是源代码中的行号。但是我不知道ANTLR语法的IntelliJ输出。如果需要行号,那么,调用GETLILE():或者在C++运行时:<代码> -DcontextSuperClass = ANTLR4::RuleCeTrimeUnTNUM < /C>。但是遗憾的是,在本文中,CPP运行时在所有情况下都没有填充ALTNATE。