1*9880d681SAndroid Build Coastguard Worker(*===----------------------------------------------------------------------=== 2*9880d681SAndroid Build Coastguard Worker * Abstract Syntax Tree (aka Parse Tree) 3*9880d681SAndroid Build Coastguard Worker *===----------------------------------------------------------------------===*) 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker(* expr - Base type for all expression nodes. *) 6*9880d681SAndroid Build Coastguard Workertype expr = 7*9880d681SAndroid Build Coastguard Worker (* variant for numeric literals like "1.0". *) 8*9880d681SAndroid Build Coastguard Worker | Number of float 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker (* variant for referencing a variable, like "a". *) 11*9880d681SAndroid Build Coastguard Worker | Variable of string 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker (* variant for a unary operator. *) 14*9880d681SAndroid Build Coastguard Worker | Unary of char * expr 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker (* variant for a binary operator. *) 17*9880d681SAndroid Build Coastguard Worker | Binary of char * expr * expr 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker (* variant for function calls. *) 20*9880d681SAndroid Build Coastguard Worker | Call of string * expr array 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker (* variant for if/then/else. *) 23*9880d681SAndroid Build Coastguard Worker | If of expr * expr * expr 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Worker (* variant for for/in. *) 26*9880d681SAndroid Build Coastguard Worker | For of string * expr * expr * expr option * expr 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker (* variant for var/in. *) 29*9880d681SAndroid Build Coastguard Worker | Var of (string * expr option) array * expr 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker(* proto - This type represents the "prototype" for a function, which captures 32*9880d681SAndroid Build Coastguard Worker * its name, and its argument names (thus implicitly the number of arguments the 33*9880d681SAndroid Build Coastguard Worker * function takes). *) 34*9880d681SAndroid Build Coastguard Workertype proto = 35*9880d681SAndroid Build Coastguard Worker | Prototype of string * string array 36*9880d681SAndroid Build Coastguard Worker | BinOpPrototype of string * string array * int 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Worker(* func - This type represents a function definition itself. *) 39*9880d681SAndroid Build Coastguard Workertype func = Function of proto * expr 40