-{open Parser}
+{
+open Parser
+open Types
+}
rule token = parse
- [' ' '\t' '\n' ] { token lexbuf }
-| ['a'-'z' 'A'-'Z']+ as x { IDENT x }
-| ['+' '*' '-' '/' '!' '_' '#'
- '@' '<' '>' '%'] as x { IDENT (String.make 1 x) }
-| "[]" { IDENT "[]" }
-| ['0'-'9']+ as a { CONST a }
-| '.' { POINT }
-| '(' { LPAR }
-| ')' { RPAR }
-| ',' { PAR }
-| ':' { SEQ }
-| "<:" { SPLIT }
-| ":>" { MERGE }
-| "~" { REC }
-| eof { EOF }
+ [' ' '\t' '\n' ] { token lexbuf }
+
+| "+" { IDENT Add}
+| "-" { IDENT Sub}
+| "*" { IDENT Mul}
+| "/" { IDENT Div}
+| "_" { IDENT Pass}
+| "!" { IDENT Stop}
+| "&" { IDENT And}
+| "|" { IDENT Or}
+| "^" { 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}
+| "exp" { IDENT Exp}
+| "sqrt" { IDENT Sqrt}
+| "log" { IDENT Ln}
+| "logten" { IDENT Lg}
+| "powf" { IDENT Power}
+| "abs" { IDENT Abs}
+| "fmodf" { IDENT Fmod}
+| "%" { IDENT Mod}
+| "remainder" { IDENT Remainder}
+| "vectorize" { IDENT Vectorize}
+| "#" { IDENT Vconcat}
+| "[]" { IDENT Vpick }
+| "serialize" { IDENT Serialize}
+| '>' { IDENT Gt}
+| '<' { IDENT Lt}
+| ">=" { IDENT Geq}
+| "<=" { IDENT Leq}
+| "==" { IDENT Eq}
+| "!=" { IDENT Neq}
+| "<<" { IDENT Shl}
+| ">>" { IDENT Shr}
+| "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 }
+| '.' { POINT }
+
+| '(' { LPAR }
+| ')' { RPAR }
+| ',' { PAR }
+| ':' { SEQ }
+| "<:" { SPLIT }
+| ":>" { MERGE }
+| "~" { REC }
+| eof { EOF }