grammar Expr; options { output=AST; ASTLabelType=CommonTree; } @header { // package com.sample; // import .TExpr; } @lexer::header { // package com.sample; } prog : (stat )+ EOF!; stat : expr NEWLINE -> expr | ID '=' expr NEWLINE -> ^('=' ID expr) | NEWLINE -> ; expr : e=multExpr ( '+'^ e=multExpr | '-'^ e=multExpr )* ; multExpr : e=atom ('*'^ atom)* ; atom : INT | ID | '('! expr ')'! ; ID : ('a'..'z' | 'A'..'Z')+ ; INT : '0'..'9'+; NEWLINE : '\r'? '\n' ; WS : (' ' | '\t')+ {skip();} ;