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

qin*_*oon 6 antlr antlr4

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

type
:   IDENTIFIER
|   typeDescriptor
;
Run Code Online (Sandbox Code Playgroud)

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

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

Sam*_*ell 9

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

type
  : IDENTIFIER     # someType
  | typeDescriptor # someOtherType
  ;
Run Code Online (Sandbox Code Playgroud)

标记外部替代项时,它将ParserRuleContext为每个标签生成类.在上面的示例中,您将获得a SomeTypeContext或a SomeOtherTypeContext,它同样适用于生成的侦听器和访问者接口.