[antlr-interest] distinguish "3 + 4" from "3 +4"

Sam Barnett-Cormack s.barnett-cormack at lancaster.ac.uk
Wed Oct 5 04:20:58 PDT 2011


On 05/10/2011 12:14, Andreas Liebig wrote:
> Hello,
> I am not very experienced with ANTLR, and I would like to ask for some ideas how to solve this task:
>
> I have to distinguish input streams like
> "3 + 4" (parsed as three tokens NUMBER PLUS NUMBER) from
> "3 +4" (parsed as NUMBER NUMBER, because the + is part of the number +4).
>
> I would like to ignore whitespace in general using the "$channel=HIDDEN;" syntax. But only in this situation whitespace does matter.
> Can you guide me to a good explanation of a possible solution?

Don't really know what docs are where, but off the top of my head... you 
need to have your NUMBER lexer rule start with an optional +, or 
presumably actually + or -, so a human-readable version of the grammar 
would have something like

NUMBER : ('+'|'-')? DIGIT+;
PLUS : '+';
MINUS : '-';

Of course, ANTLR won't like that, because it's ambiguous. There are a 
few ways to resolve the ambiguity, you'll see one if you look on the 
wiki about how to differentiate between ints and floats in the lexer. I 
can't remember the syntax off the top of my head.

Sam



More information about the antlr-interest mailing list