Reputation: 141
In ANTLR4, it seems that predicates can only be placed at the front of sub-rules in order for them to cause the sub-rule to be skipped. In my grammar, some predicates depend on a token that appears near the end of the sub-rule, with one or more rule invocations in front of it. For example:
date :
{isYear(_input.LT(3).getText())}?
month day=INTEGER year=INTEGER { ... }
In this particular example, I know that month
is always one single token, so it is always Token 3 that needs to be checked by isYear()
. In general, though, I won't know the number of tokens making up a rule like month
until runtime. Is there a way to get its token count?
Upvotes: 1
Views: 978
Reputation: 100069
There is no built-in way to get the length of the rule programmatically. You could use the documentation for ATNState
in combination with the _ATN
field in your parser to calculate all paths through a rule - if all paths through the rule contain the same number of tokens the you have calculated the exact number of tokens used by the rule.
Upvotes: 1