Sourcetype op = | Add| Sub| Mul| Div| Pow| Eq| Ne| Lt| Le| Gt| Ge| And| Or
Sourcetype expr = | Num of float| Str of string| Var of string| Index of string * expr list| Call of string * expr list| Fn of string * expr| Neg of expr| Not of expr| Bin of op * expr * expr
Sourcetype sep = | Semi| Comma| Newline
Sourcetype lvalue = | Scalar of string| Elem of string * expr list
Sourcetype datum = | D_num of float| D_str of string
Sourcetype stmt = | Print of (item * sep) list| Input of string option * lvalue list| Let of lvalue * expr| If of expr| Goto of expr| Gosub of expr| On of expr * bool * int list| Return| For of string * expr * expr * expr option| Next of string list| Dim of (string * expr list) list| Data of datum list| Read of lvalue list| Restore| Def of string * string * expr| End| Stop| Rem| List| Run| New| Bye| Fp| Int| Catalog| Load of string| Save of string| Run_file of string
Sourcetype line = | Numbered of int * stmt list option| Direct of stmt list
Sourceval capitals : string -> string Sourceval functions : string list Sourceval is_string : string -> bool