我将使用ANTLR 4.5.3将一种表示法转换为另一种表示法.我已经使用IntelliJ IDEA中的插件设计了语法描述.
在我的语法中,一条规则有几种选择.
当我在“解析树”中查看结果时,每个节点由“规则名称”组成:“行号”.
如何使用API接收此信息?如果我清楚地理解它,可以从getAltNumber()检索行号,但是该字段为空.
http://www.antlr.org/api/Java/org/antlr/v4/runtime/RuleContext.html#getAltNumber()
在文档中说默认实现不计算也不存储此alt num.
如何获得这些信息?
最佳答案 我有完全相同的问题.文档应该更准确一些,但实际上它提供了线索.直接查看插件可能会导致解决方案:
您可以简单地添加一个实现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