如何在ANTLR中接收AltNumber?

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

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

当我在“解析树”中查看结果时,每个节点由“规则名称”组成:“行号”.

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

http://www.antlr.org/api/Java/org/antlr/v4/runtime/RuleContext.html#getAltNumber()

在文档中说默认实现不计算也不存储此alt num.

如何获得这些信息?

最佳答案 我有完全相同的问题.文档应该更准确一些,但实际上它提供了线索.直接查看插件可能会导致解决方案:

https://github.com/antlr/intellij-plugin-v4/blob/master/src/java/org/antlr/intellij/plugin/preview/AltLabelTextProvider.java

您可以简单地添加一个实现setAltNumber和getAltNumber的上下文超类,如下所示:
https://github.com/antlr/antlr4/blob/master/tool/src/org/antlr/v4/tool/GrammarInterpreterRuleContext.java

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

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

点赞