1grammar MExpr;
2
3options {
4  language = Perl5;
5}
6
7prog:   stat+ ;
8
9stat:   expr NEWLINE { print "$expr.value\n"; }
10    |   NEWLINE
11    ;
12
13expr returns [value]
14    :   e=atom { $value = $e.value; }
15        (   '+' e=atom { $value += $e.value; }
16        |   '-' e=atom { $value -= $e.value; }
17        )*
18    ;
19
20atom returns [value]
21    :   INT { $value = $INT.text; }
22    |   '(' expr ')' { $value = $expr.value; }
23    ;
24
25ID  :   ('a'..'z'|'A'..'Z')+ ;
26INT :   '0'..'9'+ ;
27NEWLINE:'\r'? '\n' ;
28WS  :   (' '|'\t')+ { $self->skip(); } ;
29