1*16467b97STreehugger Robotgrammar SimpleCalc; 2*16467b97STreehugger Robotoptions { language = Perl5; } 3*16467b97STreehugger Robot 4*16467b97STreehugger Robottokens { 5*16467b97STreehugger Robot PLUS = '+' ; 6*16467b97STreehugger Robot MINUS = '-' ; 7*16467b97STreehugger Robot MULT = '*' ; 8*16467b97STreehugger Robot DIV = '/' ; 9*16467b97STreehugger Robot} 10*16467b97STreehugger Robot 11*16467b97STreehugger Robot/*------------------------------------------------------------------ 12*16467b97STreehugger Robot * PARSER RULES 13*16467b97STreehugger Robot *------------------------------------------------------------------*/ 14*16467b97STreehugger Robot 15*16467b97STreehugger Robotexpr : term ( ( PLUS | MINUS ) term )* ; 16*16467b97STreehugger Robot 17*16467b97STreehugger Robotterm : factor ( ( MULT | DIV ) factor )* ; 18*16467b97STreehugger Robot 19*16467b97STreehugger Robotfactor : NUMBER ; 20*16467b97STreehugger Robot 21*16467b97STreehugger Robot/*------------------------------------------------------------------ 22*16467b97STreehugger Robot * LEXER RULES 23*16467b97STreehugger Robot *------------------------------------------------------------------*/ 24*16467b97STreehugger Robot 25*16467b97STreehugger RobotNUMBER : (DIGIT)+ ; 26*16467b97STreehugger Robot 27*16467b97STreehugger RobotWHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = $self->HIDDEN; } ; 28*16467b97STreehugger Robot 29*16467b97STreehugger Robotfragment DIGIT : '0'..'9' ; 30