From f3ad8b46ca1621f4a90db91ed6f9c1eceac96c4c Mon Sep 17 00:00:00 2001 From: WANG Date: Mon, 9 Sep 2013 14:24:47 +0200 Subject: [PATCH] Completing Faustine by adding following primitives : float, power, &, |, xor, >=, <=, ==, !=, acos, asin, tan, exp, log, log10, abs, fmod, remainder, ceil, rint, rwtable. --- interpretor/lexer.mll | 30 +++++++++++++--- interpretor/types.ml | 79 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 96 insertions(+), 13 deletions(-) diff --git a/interpretor/lexer.mll b/interpretor/lexer.mll index 3cb9847..4f2f525 100644 --- a/interpretor/lexer.mll +++ b/interpretor/lexer.mll @@ -10,30 +10,52 @@ rule token = parse | "-" { IDENT Sub} | "*" { IDENT Mul} | "/" { IDENT Div} +| "^" { IDENT Power} | "_" { IDENT Pass} | "!" { IDENT Stop} +| "&" { IDENT And} +| "|" { IDENT Or} +| "xor" { IDENT Xor} | "mem" { IDENT Mem} | "@" { IDENT Delay} | "floor" { IDENT Floor} +| "ceil" { IDENT Ceil} +| "rint" { IDENT Rint} | "int" { IDENT Int} +| "float" { IDENT Float} | "sin" { IDENT Sin} +| "asin" { IDENT Asin} | "cos" { IDENT Cos} +| "acos" { IDENT Acos} +| "tan" { IDENT Tan} | "atan" { IDENT Atan} -| "atantwo" { IDENT Atan2} +| "atantwo" { IDENT Atan2} +| "exp" { IDENT Exp} | "sqrt" { IDENT Sqrt} -| "rdtable" { IDENT Rdtable} +| "log" { IDENT Ln} +| "logten" { IDENT Log10} +| "pow" { IDENT Power} +| "abs" { IDENT Abs} +| "fmod" { IDENT Fmod} | "%" { IDENT Mod} +| "remainder" { IDENT Remainder} | "vectorize" { IDENT Vectorize} | "#" { IDENT Vconcat} | "[]" { IDENT Vpick } | "serialize" { IDENT Serialize} -| ">" { IDENT Larger} -| "<" { IDENT Smaller} +| '>' { IDENT Greater} +| '<' { IDENT Less} +| ">=" { IDENT Gore} +| "<=" { IDENT Lore} +| "==" { IDENT Equal} +| "!=" { IDENT Different} | "max" { IDENT Max} | "min" { IDENT Min} | "prefix" { IDENT Prefix} | "selecttwo" { IDENT Select2} | "selectthree" { IDENT Select3} +| "rdtable" { IDENT Rdtable} +| "rwtable" { IDENT Rwtable} | ['0'-'9']+ as a { CONST a } diff --git a/interpretor/types.ml b/interpretor/types.ml index 0b7cfde..68e550c 100644 --- a/interpretor/types.ml +++ b/interpretor/types.ml @@ -31,17 +31,36 @@ class type value_type = method mul : value_type -> value_type method recip : value_type method div : value_type -> value_type + method power : value_type -> value_type + method _and : value_type -> value_type + method _or : value_type -> value_type + method _xor : value_type -> value_type method zero : value_type method floor : value_type + method ceil : value_type + method rint : value_type method int : value_type + method float : value_type method sin : value_type + method asin : value_type method cos : value_type + method acos : value_type + method tan : value_type method atan : value_type - method sqrt : value_type method atan2 : value_type -> value_type + method expo : value_type + method sqrt : value_type + method ln : value_type + method log10 : value_type + method fmod : value_type -> value_type method _mod : value_type -> value_type - method larger : value_type -> value_type - method smaller : value_type -> value_type + method remainder : value_type -> value_type + method greater : value_type -> value_type + method less : value_type -> value_type + method gore : value_type -> value_type + method lore : value_type -> value_type + method equal : value_type -> value_type + method different : value_type -> value_type method max : value_type -> value_type method min : value_type -> value_type end;; @@ -51,31 +70,51 @@ type symbol = Add | Sub | Mul | Div + | Power | Pass | Stop + | And + | Or + | Xor | Mem | Delay | Floor + | Ceil + | Rint | Int + | Float | Sin + | Asin | Cos + | Acos + | Tan | Atan | Atan2 + | Exp | Sqrt - | Rdtable + | Ln + | Log10 + | Abs + | Fmod | Mod + | Remainder | Vectorize | Vconcat | Vpick | Serialize - | Larger - | Smaller + | Greater + | Less + | Gore + | Lore + | Equal + | Different | Max | Min | Prefix | Select2 | Select3 - + | Rdtable + | Rwtable type faust_exp = Const of basic @@ -109,6 +148,10 @@ class type signal_type = method sub : signal_type -> signal_type method mul : signal_type -> signal_type method div : signal_type -> signal_type + method power : signal_type -> signal_type + method _and : signal_type -> signal_type + method _or : signal_type -> signal_type + method _xor : signal_type -> signal_type method delay : signal_type -> signal_type method mem : signal_type method vectorize : signal_type -> signal_type @@ -116,18 +159,36 @@ class type signal_type = method vconcat : signal_type -> signal_type method vpick : signal_type -> signal_type method floor : signal_type + method ceil : signal_type + method rint : signal_type method int : signal_type + method float : signal_type method sin : signal_type + method asin : signal_type method cos : signal_type + method acos : signal_type + method tan : signal_type method atan : signal_type method atan2 : signal_type -> signal_type + method expo : signal_type method sqrt : signal_type + method ln : signal_type + method log10 : signal_type + method abs : signal_type + method fmod : signal_type -> signal_type method _mod : signal_type -> signal_type - method larger : signal_type -> signal_type - method smaller : signal_type -> signal_type + method remainder : signal_type -> signal_type + method greater : signal_type -> signal_type + method less : signal_type -> signal_type + method gore : signal_type -> signal_type + method lore : signal_type -> signal_type + method equal : signal_type -> signal_type + method different : signal_type -> signal_type method max : signal_type -> signal_type method min : signal_type -> signal_type method rdtable : signal_type -> signal_type -> signal_type + method rwtable : signal_type -> signal_type -> + signal_type -> signal_type -> signal_type method select2 : signal_type -> signal_type -> signal_type method select3 : signal_type -> signal_type -> signal_type -> signal_type method prefix : signal_type -> signal_type -- 2.20.1