[antlr-interest] need help with predicates

Andy Tripp antlr at jazillian.com
Thu Aug 9 14:25:28 PDT 2007


Richard Clark wrote:
> The usual answer to dealing with context-dependant elements is to move
> the decision from the lexer into the parser.
>
> You might do this:
>
> identifier: (ID_FRAGMENT '!' ID_FRAGMENT) => ID_FRAGMENT '!' ID_FRAGMENT
>              | ID_FRAGMENT
>              /* You still have to deal with the other suffixes */
>              ;
>
> ID_FRAGMENT: LETTER (LETTER| DECIMAL_LITERAL)* ;
>
>  ...Richard
>
>   
Hmmm. I tried this, and thought it didn't work, because when I have 
something like:

Dim a!
Dim b

...since keywords such as 'Dim' are also identifiers, "a ! Dim" would be 
considered an identifier.
But thinking about it now, that shouldn't be a problem. "Dim" should not 
match ID_FRAGMENT, as
it can only match its specific token:
DIM='Dim';

I'll look into it more, thanks for the suggestion.


More information about the antlr-interest mailing list