java - 所有标签的访问者方法

标签 java antlr4

我有一个带有替代标签的解析器规则。
我想在任何标签被良好访问时实现访问者方法:

someRule
    :    'a' #aLabel
    |    'b' #bLabel
    |    'c' #cLabel
    ;

我需要这样的方法:

T visitSomeRule(SomeRuleContext ctx)

最佳答案

使用像您这样的标签,您最终会得到类似的结果:

override VisitAlabel(aLabelRuleContext) {....}
override VisitBlabel(bLabelRuleContext) {....}
override VisitClabel(cLabelRuleContext) {....}

但是,添加替代标签会导致 ANTLR4 无法生成上面示例中的通用上下文类 SomeRuleContext。两者不可能混合。非此即彼。如果您想访问 SomeRuleContext,则必须删除标签并检查 SomeRuleContext 处理程序内的替代上下文。

我的资料来源:这方面的经验以及 Terence Parr 的《The Definitive ANTLR4 Reference》,第 120 页。

关于java - 所有标签的访问者方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44691715/

相关文章:

python - 如何获取带注释的语法树?

java - 如何为java对象生成校验和

java - 如何在 SpringMVC Controller 方法中提交或回滚事务

java - 如何按促销价格过滤对象列表

antlr - NetBeans 平台语言和 ANTLR 词法分析器

antlr4 - 从 AST 生成源代码

ANTLR4:获取每个规则的开始和结束索引:$stop 行为奇怪

java - 为什么在打印对象时调用 toString() 方法?

java - ActiveMQ 从 java 中获取正在收听某个主题的消费者数量

gradle - 在gradle中使用包声明生成ANTLR4语法文件