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
|