antlr4:如何知道在给定上下文的情况下选择哪个替代方案

时间:2014-02-25 01:27:05

标签: antlr antlr4

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

type
:   IDENTIFIER
|   typeDescriptor
;

在我的程序中,我有一个typeContext'ctx'的实例。我如何知道是否选择了路径IDENTIFIER,或者是否选择了typeDescriptor。

我认识到一种方法是测试ctx.IDENTIFIER() == nullctx.typeDescriptor() == null。但是,当有更多的选择时,似乎效果不佳。有没有办法返回索引来指示选择哪个规则?谢谢。

1 个答案:

答案 0 :(得分:8)

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

type
  : IDENTIFIER     # someType
  | typeDescriptor # someOtherType
  ;

当您标记外部备选项时,它将为每个标签生成ParserRuleContext个类。在上面的示例中,您将获得SomeTypeContextSomeOtherTypeContext,它同样适用于生成的侦听器和访问者界面。