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

Bart Kiers bkiers at gmail.com
Wed Oct 5 04:43:59 PDT 2011


Hi Andreas,

I think it's a bad idea to "glue" a '+' (or '-') to a NUMBER token. If I
were you, I'd resolve that in a unary-parser rule:

expression
  :  add
  ;

add
  :  multiplication (('+' | '-') multiplication)*
  ;

multiplication
  :  unary (('*' | '/') unary)*
  ;

unary
  :  '+' atom
  |  '-' atom
  |  atom
  ;

atom
  :  NUMBER
  |  '(' expression ')'
  ;



The grammar above would handle expressions like:

+ 1 + -5
^     ^
|     |
+-----+---- unary '+' and '-'


Regards,

Bart.


On Wed, Oct 5, 2011 at 1:14 PM, Andreas Liebig <liebigandreas at yahoo.com>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?
>
> Thanks
> Andreas
>
> 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