[antlr-interest] Disambiguating Decimal and Integer '.'
Kaleb Pederson
kaleb.pederson at gmail.com
Thu Oct 1 15:46:33 PDT 2009
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
More information about the antlr-interest
mailing list