Rename interpretor to interpreter.
[Faustine.git] / interpreter / parser.mly
diff --git a/interpreter/parser.mly b/interpreter/parser.mly
new file mode 100644 (file)
index 0000000..9e9b151
--- /dev/null
@@ -0,0 +1,26 @@
+%{ 
+       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) };