parser grammar VecMath_Parser; options { output=AST; } tokens { SHIFT; VEC; } public prog : stat+ ; stat : ID EQUAL expr -> ^( EQUAL ID expr ) | PRINT^ expr ; expr : multExpr ( PLUS^ multExpr )* ; multExpr : primary ( ( MULT^ | DOT^ ) primary )* ; primary : INT | ID | OPEN_SQUARE expr ( COMMA expr )* CLOSE_SQUARE -> ^( VEC expr+ ) | OPEN_BRACE expr CLOSE_BRACE -> expr ;