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