(* Abstract syntax for the GML language *) type operator = Op_acos | Op_addi | Op_addf | Op_apply | Op_asin | Op_clampf | Op_cone | Op_cos | Op_cube | Op_cylinder | Op_difference | Op_divi | Op_divf | Op_eqi | Op_eqf | Op_floor | Op_frac | Op_get | Op_getx | Op_gety | Op_getz | Op_if | Op_intersect | Op_length | Op_lessi | Op_lessf | Op_light | Op_modi | Op_muli | Op_mulf | Op_negi | Op_negf | Op_plane | Op_point | Op_pointlight | Op_real | Op_render | Op_rotatex | Op_rotatey | Op_rotatez | Op_scale | Op_sin | Op_sphere | Op_spotlight | Op_sqrt | Op_subi | Op_subf | Op_translate | Op_union | Op_uscale (* for testing *) | Op_print | Op_printstack type tok = Operator of operator | Identifier of string | Binder of string | Boolean of bool | Integer of int | Real of float | String of string | Array of tok list | Function of tok list