grammar Expr; @members { public static void main(String[] args) throws Exception { ExprLexer lex = new ExprLexer(new ANTLRFileStream(args[0])); CommonTokenStream tokens = new CommonTokenStream(lex); ExprParser parser = new ExprParser(tokens); try { parser.s(); } catch (RecognitionException e) { e.printStackTrace(); } } } /*------------------------------------------------------------------ * LEXER RULES *------------------------------------------------------------------*/ NUM : ('0'..'9')+; PLUSMINUS : '+' | '-'; STARDIV : '*' | '/'; SPACE : ' ' {skip();}; NL : '\r'? '\n' {skip();}; /*------------------------------------------------------------------ * PARSER RULES *------------------------------------------------------------------*/ s : kif {System.out.println($kif.v);} ; kif returns [int v] : t1=tag {$v=$t1.v;} ( o=PLUSMINUS t2=tag {if ($o.text.equals("+")) $v+=$t2.v; else $v-=$t2.v;})* ; tag returns [int v] : t1=tenyezo {$v=$t1.v;} ( o=STARDIV t2=tenyezo {if ($o.text.equals("*")) $v*=$t2.v; else $v/=$t2.v;})* ; tenyezo returns [int v] : n=NUM { $v = Integer.parseInt($n.text); } | '(' kif ')' { $v = $kif.v; } ;