%{ open Syntax %} %token LPAREN RPAREN %token PLUS MINUS MUL ADD1 SUB1 %token INTV %token ID %start toplevel %type toplevel %% toplevel : Exp { Prog $1 } Exp : INTV { ILit $1 } | ID { Var $1 } | LPAREN PrimOp Arglist RPAREN { Prim ($2, $3) } PrimOp : PLUS { Plus } | MINUS { Minus } | MUL { Mul } | ADD1 { Add1 } | SUB1 { Sub1 } Arglist : /* empty */ { [] } | Exp Arglist { $1 :: $2 }