Assume there is a rule about 'type'. It is either a predefined type (referred by IDENTIFIER) or a typeDescriptor.
type
: IDENTIFIER
| typeDescriptor
;
In my program, I have got an instance of typeContext 'ctx'. How do I know if the path IDENTIFIER is chosen, or typeDescriptor is chosen.
I recognise one way which is to test ctx.IDENTIFIER() == null
and ctx.typeDescriptor() == null
. But it seems not working very well when there are a lot more alternatives. Is there a way to return an index to indicate which rule is chosen? Thanks.
No, you can either use the method you described (checking if an item is non-null), or you can label the outer alternatives of the rule using the #
operator.
type
: IDENTIFIER # someType
| typeDescriptor # someOtherType
;
When you label the outer alternatives, it will produce ParserRuleContext
classes for each of the labels. In the example above, you'll either get a SomeTypeContext
or a SomeOtherTypeContext
, which applies equally to the generated listener and visitor interfaces.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With