grammar Prefix; @members { public static void main(String[] args) throws Exception { PrefixLexer lex = new PrefixLexer(new ANTLRFileStream(args[0])); CommonTokenStream tokens = new CommonTokenStream(lex); PrefixParser parser = new PrefixParser(tokens); try { parser.s(); } catch (RecognitionException e) { e.printStackTrace(); } } } /*------------------------------------------------------------------ * LEXER RULES *------------------------------------------------------------------*/ fragment DIGIT : '0'..'9' ; NUM : (DIGIT)+; PLUS : '+' ; STAR : '*' ; SPACE : ' ' {skip();}; NL : '\r'? '\n' {skip();}; /*------------------------------------------------------------------ * PARSER RULES *------------------------------------------------------------------*/ s : expr {System.out.println($expr.v);}; expr returns [int v] : PLUS t1=expr t2=expr {$v=$t1.v+$t2.v;} | STAR t1=expr t2=expr {$v=$t1.v*$t2.v;} | NUM {$v=Integer.parseInt($NUM.text);} ;