假设有一个关于“类型”的规则。它可以是预定义的类型(由IDENTIFIER引用)或typeDescriptor。

type
:   IDENTIFIER
|   typeDescriptor
;

在我的程序中,我有一个typeContext'ctx'的实例。我怎么知道是选择路径IDENTIFIER还是选择typeDescriptor。

我认识到一种测试ctx.IDENTIFIER() == nullctx.typeDescriptor() == null的方法。但是,当有更多替代方案时,它似乎无法很好地工作。有没有一种方法可以返回索引来指示选择了哪个规则?谢谢。

最佳答案

不可以,您可以使用描述的方法(检查项目是否为非null),也可以使用#运算符标记规则的外部替代项。

type
  : IDENTIFIER     # someType
  | typeDescriptor # someOtherType
  ;

当您标记外部替代项时,它将为每个标签生成ParserRuleContext类。在上面的示例中,您将获得SomeTypeContextSomeOtherTypeContext,它们同样适用于生成的监听器和访客接口(interface)。

10-02 10:07
查看更多