Java 所有标签的访问者方法
我有一个带有可选标签的解析器规则。Java 所有标签的访问者方法,java,antlr4,Java,Antlr4,我有一个带有可选标签的解析器规则。 我想为任何标签的良好访问实现一个访问者方法: someRule : 'a' #aLabel | 'b' #bLabel | 'c' #cLabel ; 我需要这样的方法: T visitSomeRule(SomeRuleContext ctx) 有了像您这样的标签,您最终会得到如下结果: override VisitAlabel(aLabelRuleContext) {....} override Visi
我想为任何标签的良好访问实现一个访问者方法:
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的最终ANTLR4参考,第120页。也许我可以覆盖访问方法并检查参数的类型?不过,这似乎是一种老生常谈的方式。是的,这就是我在回答中所指的。如果您阅读了Terence Parr关于替代标签的书,很明显,添加此功能是为了通过更集中的子类化提供“更精确”的上下文。我发现我的大部分工作都喜欢使用标签。但是,如果您确实需要更高级别的上下文,您当然可以遍历它的子级,检查它们的类型,并单独对它们执行操作。这是可能的,我已经做到了。直到我了解了替代标签