1class CalcParser extends Parser; 2options { 3 buildAST = true; // uses CommonAST by default 4} 5 6expr 7 : mexpr (PLUS^ mexpr)* SEMI! 8 ; 9 10mexpr 11 : atom (STAR^ atom)* 12 ; 13 14atom: INT 15 ; 16 17class CalcLexer extends Lexer; 18 19WS : (' ' 20 | '\t' 21 | '\n' 22 | '\r') 23 { _ttype = Token.SKIP; } 24 ; 25 26LPAREN: '(' 27 ; 28 29RPAREN: ')' 30 ; 31 32STAR: '*' 33 ; 34 35PLUS: '+' 36 ; 37 38SEMI: ';' 39 ; 40 41protected 42DIGIT 43 : '0'..'9' 44 ; 45 46INT : (DIGIT)+ 47 ; 48 49class CalcTreeWalker extends TreeParser; 50 51expr returns [float r] 52{ 53 float a,b; 54 r=0; 55} 56 : #(PLUS a=expr b=expr) {r = a+b;} 57 | #(STAR a=expr b=expr) {r = a*b;} 58 | i:INT {r = (float)Integer.parseInt(i.getText());} 59 ; 60 61