[antlr-interest] V3 lexer behaviour clarifications

Gavin Lambert antlr at mirality.co.nz
Sat Mar 31 16:09:27 PDT 2007


At 10:42 1/04/2007, you wrote:
 >That says to predict alt 1, FLOAT, if it sees a '.' after the 
INT
 >
 >else do alt 2 (INT).
[...]
 >lexer grammar T;
 >FLOAT : INT '.' INT;
 >INT : ('0'..'9')+;
 >
 >:)
 >
 >Ain't that slick?  Must be something else going on with your
 >grammar.

No, you're right, I goofed :)  My real int rule looked like this:

Integer
   : '0' ('x' | 'X') HexDigit+
   | '0'
   | ('+' | '-')? NonZeroDigit Digit*
   ;

... which of course meant that if the leading digit was a zero 
then it wouldn't match a sign, and of course the input it was 
failing on was "-0.3223e-23".

(I broke the leading-zero case out in the first place because I 
wanted to specifically disallow a 0 followed by other digits.)

Rewriting the last two alts so that both supported signs fixed the 
problem.  Sorry for the noise ;)



More information about the antlr-interest mailing list