xref: /aosp_15_r20/external/antlr/runtime/Perl5/examples/mexpr/MExpr.g (revision 16467b971bd3e2009fad32dd79016f2c7e421deb)
1*16467b97STreehugger Robotgrammar MExpr;
2*16467b97STreehugger Robot
3*16467b97STreehugger Robotoptions {
4*16467b97STreehugger Robot  language = Perl5;
5*16467b97STreehugger Robot}
6*16467b97STreehugger Robot
7*16467b97STreehugger Robotprog:   stat+ ;
8*16467b97STreehugger Robot
9*16467b97STreehugger Robotstat:   expr NEWLINE { print "$expr.value\n"; }
10*16467b97STreehugger Robot    |   NEWLINE
11*16467b97STreehugger Robot    ;
12*16467b97STreehugger Robot
13*16467b97STreehugger Robotexpr returns [value]
14*16467b97STreehugger Robot    :   e=atom { $value = $e.value; }
15*16467b97STreehugger Robot        (   '+' e=atom { $value += $e.value; }
16*16467b97STreehugger Robot        |   '-' e=atom { $value -= $e.value; }
17*16467b97STreehugger Robot        )*
18*16467b97STreehugger Robot    ;
19*16467b97STreehugger Robot
20*16467b97STreehugger Robotatom returns [value]
21*16467b97STreehugger Robot    :   INT { $value = $INT.text; }
22*16467b97STreehugger Robot    |   '(' expr ')' { $value = $expr.value; }
23*16467b97STreehugger Robot    ;
24*16467b97STreehugger Robot
25*16467b97STreehugger RobotID  :   ('a'..'z'|'A'..'Z')+ ;
26*16467b97STreehugger RobotINT :   '0'..'9'+ ;
27*16467b97STreehugger RobotNEWLINE:'\r'? '\n' ;
28*16467b97STreehugger RobotWS  :   (' '|'\t')+ { $self->skip(); } ;
29