假设有一个关于'类型'的规则。它是预定义类型(由IDENTIFIER引用)或typeDescriptor。
type
: IDENTIFIER
| typeDescriptor
;
在我的程序中,我有一个typeContext'ctx'的实例。我如何知道是否选择了路径IDENTIFIER,或者是否选择了typeDescriptor。
我认识到一种方法是测试ctx.IDENTIFIER() == null
和ctx.typeDescriptor() == null
。但是,当有更多的选择时,似乎效果不佳。有没有办法返回索引来指示选择哪个规则?谢谢。
答案 0 :(得分:8)
不,您可以使用您描述的方法(检查项目是否为非空),或者您可以使用#
运算符标记规则的外部替代方案。
type
: IDENTIFIER # someType
| typeDescriptor # someOtherType
;
当您标记外部备选项时,它将为每个标签生成ParserRuleContext
个类。在上面的示例中,您将获得SomeTypeContext
或SomeOtherTypeContext
,它同样适用于生成的侦听器和访问者界面。