Mathmap : module { #mathmap.b PATH : con "/dis/lib/mathmap.dis"; functions : list of string; pre_defined_vars : list of string; Token :adt { text : string; pick { Operator => Comparitor => Keyword => Label => typetag : string; Function => Predefvar => Number => LeftCBracket => RightCBracket => LeftSBracket => RightSBracket => Comma => } send : fn(t : self ref Token, c : chan of ref Token) : ref Token; unexpected: fn(t: self ref Token, p : ref Parser) : string; }; Filter : adt { name : string; options : list of string; args : list of ref UserValue; code : list of ref Code; }; Code : adt { pick { Assignment => varname : string; argument : ref Argument; Evaluation => argument : ref Argument; Conditional => condition : ref Argument; positive : ref Code; negative : ref Code; } }; Argument : adt { pick { Literal => text : string; Function => function : ref Function; } }; Function : adt { name : string; arguments : cyclic array of ref Argument; }; UserValue : adt { name : string; pick { Float => min, max : string; default : string; Int => min, max : string; default : string; Bool => Color => Curve => Gradient => Image => options : string; } arg_init : fn (u : self ref UserValue) : (string, string); }; Parser : adt { fname : string; line : int; tokens : chan of ref Token; filters : list of ref Filter; variables : list of string; tokenizer : fn (p : self ref Parser); parse: fn(p : self ref Parser); label : fn (p : self ref Parser) : string; number : fn(p : self ref Parser) : string; number_maybe : fn(p : self ref Parser) : (int, string); filter : fn(p : self ref Parser, options : list of string) : ref Filter; is_filter : fn(p : self ref Parser, label : string) : string; is_variable : fn(p : self ref Parser, label : string) : string; conditional : fn(p : self ref Parser); code : fn(p : self ref Parser); value : fn(p : self ref Parser); rhs : fn(p : self ref Parser, bracket : string); argument : fn(p : self ref Parser) : ref Argument; arguments : fn(p : self ref Parser, firstarg : ref Argument) : array of ref Argument; label_typetag : fn(p : self ref Parser) : string; operator : fn(p : self ref Parser) : string; operator_maybe : fn(p : self ref Parser) : string; image_uservalue : fn(p : self ref Parser, options : string) : ref UserValue; uservalue : fn(p : self ref Parser, tag : string) : (int, ref UserValue); uservalues : fn(p : self ref Parser) : (string, string); float_uservalue : fn(p : self ref Parser) : (int, ref UserValue); int_uservalue : fn(p : self ref Parser) : (int, ref UserValue); bool_uservalue : fn(p : self ref Parser) : ref UserValue; color_uservalue : fn(p : self ref Parser) : ref UserValue; curve_uservalue : fn(p : self ref Parser) : ref UserValue; gradient_uservalue : fn(p : self ref Parser) : ref UserValue; }; parse : fn (fname : string); }; # Put