{
open Parser
open Types
}

rule token = parse
  [' ' '\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 }