所有标签的访问者方法

Visitor method for all labels

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

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

我需要这样的方法:

T visitSomeRule(SomeRuleContext ctx)

使用像您这样的标签,您最终会得到如下内容:

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

但是,添加替代标签会导致 ANTLR4 在上面的示例中不生成通用上下文 class SomeRuleContext。不可能两者兼而有之。非此即彼。如果您想访问 SomeRuleContext,那么您必须删除标签并检查 SomeRuleContext.

的处理程序中的替代上下文

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