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