17abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao(*===----------------------------------------------------------------------=== 27abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao * Abstract Syntax Tree (aka Parse Tree) 37abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao *===----------------------------------------------------------------------===*) 47abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao 57abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao(* expr - Base type for all expression nodes. *) 67abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liaotype expr = 77abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao (* variant for numeric literals like "1.0". *) 87abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao | Number of float 97abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao 107abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao (* variant for referencing a variable, like "a". *) 117abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao | Variable of string 127abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao 137abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao (* variant for a binary operator. *) 147abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao | Binary of char * expr * expr 157abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao 167abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao (* variant for function calls. *) 177abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao | Call of string * expr array 187abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao 197abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao(* proto - This type represents the "prototype" for a function, which captures 207abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao * its name, and its argument names (thus implicitly the number of arguments the 217abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao * function takes). *) 227abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liaotype proto = Prototype of string * string array 237abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao 247abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liao(* func - This type represents a function definition itself. *) 257abe37e4aee38cc79d91dd069a37d7e91d5bef53Shih-wei Liaotype func = Function of proto * expr 26