antlr4: how to know which alternative is chosen given a context
Asked Answered
R

1

7

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.

Reasonable answered 25/2, 2014 at 1:27 Comment(0)
E
11

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.

Expostulatory answered 25/2, 2014 at 2:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.