[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