[antlr-interest] Disambiguating Decimal and Integer '.'

Jim Idle jimi at temporal-wave.com
Thu Oct 1 15:49:53 PDT 2009


Wiki - front page - lexing for dot, range, .....

http://www.antlr.org/wiki/display/ANTLR3/Lexer+grammar+for+floating+point%2C+dot%2C+range%2C+time+specs

This grammar also caters for 999.toString() type things as it comes from JavaFX.

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Kaleb Pederson
> Sent: Thursday, October 01, 2009 3:47 PM
> To: Gavin Lambert
> Cc: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Disambiguating Decimal and Integer '.'
> 
> On Thursday 01 October 2009 01:06:54 pm Gavin Lambert wrote:
> > At 08:12 2/10/2009, Kaleb Pederson wrote:
> >  >INTEGER
> >  >    :   NUMBER+;
> >  >
> >  >DECIMAL
> >  >    :   INTEGER '.' INTEGER;
> >
> > You should have a look at the wiki and the mailing list
> > archives.  This is a fairly common problem with a fairly simple
> > solution:
> 
> I've looked, read, and re-read, but apparently I don't know exactly
> what to look for, so thanks for pointing it out.  I'd be interested to
> any references in the wiki or archives if you have them.  My google-fu
> and not-so-random searching didn't bring up anything useful.
> 
> > fragment INTEGER : NUMBER+ ;
> >
> > DECIMAL
> >    :  INTEGER ('.' INTEGER | { $type = INTEGER; })
> >    ;
> 
> This did not work, nor did adding an options {k=2;} statement.
> 
> > If that doesn't work by itself, you can add a predicate to force a
> > two-character lookahead:
> >
> > DECIMAL
> >    :  INTEGER (('.' NUMBER) => '.' INTEGER | { $type = INTEGER; })
> >    ;
> 
> This worked great, thank you!  I would not have thought to try
> something like that.  I was attempting to have the DECIMAL non-terminal
> avoided, rather than allowing it to match the same thing as an INTEGER
> and changing the type on it.  Perhaps that caused some tunnel vision.
> 
> --Kaleb
> 
> http://twitter.com/kalebpederson
> http://kalebpederson.com
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-
> email-address





More information about the antlr-interest mailing list