[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