1
我有一个带有替代标签的解析器规则。
我想实现当任何标签都是很好的参观了访问者方法:所有标签的访问方法
someRule
: 'a' #aLabel
| 'b' #bLabel
| 'c' #cLabel
;
我需要一些像这样的方法:
T visitSomeRule(SomeRuleContext ctx)
我有一个带有替代标签的解析器规则。
我想实现当任何标签都是很好的参观了访问者方法:所有标签的访问方法
someRule
: 'a' #aLabel
| 'b' #bLabel
| 'c' #cLabel
;
我需要一些像这样的方法:
T visitSomeRule(SomeRuleContext ctx)
像你这样的标签,你会结束了类似:
override VisitAlabel(aLabelRuleContext) {....}
override VisitBlabel(bLabelRuleContext) {....}
override VisitClabel(cLabelRuleContext) {....}
然而,增加的替代标签,使ANTLR4不生成一般上下文类SomeRuleContext
在你上面的例子中。不可能混合使用两者。非此即彼。如果你想获得SomeRuleContext
则必须删除标签并检查处理器内部的替代上下文的SomeRuleContext.
我的源:这个和权威ANTLR4参考由特伦斯·帕尔的经验,第120页。
也许我可以重写访问方法并检查参数的类型?尽管如此,这看起来像是一种拙劣的方式。 – Midnightas
是的,这就是我在回答中所指的。如果您阅读Terence Parr关于替代标签的书,很明显这个功能是通过更加集中的子类来增加“更精确”的上下文。而且我发现我更喜欢在我的大部分工作中使用标签。但是,如果你确实需要更高层次的上下文,那么你肯定可以遍历它的子节点,检查它们的类型,并单独对它们执行操作。这是可能的,我已经做到了。直到我了解到替代标签。 ;) – TomServo