[antlr-interest] Problems defining a simple Integer Match

Jim Idle jimi at temporal-wave.com
Mon May 4 07:08:11 PDT 2009


Marwan Ajraoui wrote:
> Hi There;
>
> I'm currently defining a grammar for a based tag language using ANTLR;
> The problem I'm facing is that a single digit doesn't match my defined
> rule INTEGER, here is the definition I put (as i saw in The Definitive
> guide of ANTLR):
>
> DIGITO: '0'..'9' ;
> INT : DIGITO + ;
>
> This rule should match any digit, but does match only numbers that are
> composed of tow or more digits, like 45, 0567, etc. Numbers as 0, 7 or
> 5 doesn't match.
>
> I will be gratefull, if you give me any issue about it;
>   
You probably are best reading through the example grammars to get a full 
understanding, but here both of your lexer rules can match digits so the 
best ANTLR can do is realize that INT is selected when there are more 
than one DIGITs because DIGIT0 can only match 1 digit.

You cannot have two rules that match the same thing basically. When you 
want to use a rule as sort of 'subroutine' that does not create any 
tokens itself, then you need to mark it as a fragment. Then it will 
generate code that can be called by other rules but will not try and 
create tokens itself.

fragment DIGITO: '0'..'9' ;
INT : DIGITO + ;


Jim




More information about the antlr-interest mailing list