--- /dev/null
+%{
+ open Types
+%}
+
+%token <string> CONST
+%token <Types.symbol> IDENT
+%token LPAR RPAR SEQ SPLIT MERGE PAR REC EOF POINT
+%right SPLIT MERGE
+%right SEQ
+%right PAR
+%left REC
+%left POINT
+%start main
+%type <Types.faust_exp> main
+%%
+main: faust_exp EOF { $1 };
+faust_exp: CONST { Const(N (int_of_string $1)) }
+ | CONST POINT { Const(R (float_of_string $1)) }
+ | CONST POINT CONST { Const(R (float_of_string ($1 ^ "." ^ $3))) }
+ | IDENT { Ident($1) }
+ | LPAR faust_exp RPAR { $2 }
+ | faust_exp PAR faust_exp { Par($1,$3) }
+ | faust_exp SPLIT faust_exp { Split($1,$3) }
+ | faust_exp MERGE faust_exp { Merge($1,$3) }
+ | faust_exp SEQ faust_exp { Seq($1,$3) }
+ | faust_exp REC faust_exp { Rec($1,$3) };