Warning: session_start(): open(/var/lib/php/sessions/sess_o7e1cvgi31335kos4e3dr3m2g7, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
/*
Input is e.g. "32p 8c". We want to get out the 2 operators.
Then we apply a "puzzler" which tries to combine the operators in a useful way.
// Operators
p = scaleToHeight : IBWntegralImage -> BWImage
c = posterize : BWImage -> BWImage
// Juxtaposition of operators
_ _ = juxtapose : Op, Op -> Op [left-assoc]
*/
sclass GazelleVScriptParser extends SimpleLeftToRightParser {
CalculatedFieldIndexedList, S> operators = new(op -> op.name);
new L parsed; // contains ints and operators
*(S text) { super(text); set caseInsensitive; }
void addOperators(Iterable extends GAbstractOperator> l) {
addAll(operators, l);
}
void parse(S text) { this.text = text; parse(); }
void parse {
while (mainLoop()) {
if (isInteger()) {
addToParse(parseInt(tpp()));
continue;
}
addToParse(findOp(tpp()));
}
}
// assumes you have already called tpp()
void addToParse(O o) {
parsed.add(ParsedWithTokens(o, tok, ptr.idx()-2, ptr.idx()));
}
GAbstractOperator findOp(S name) {
var ops = operators.getAllByKey(name);
if (empty(ops))
warn("Unknown operator: " + name);
else if (l(ops) > 1)
warn("Multiple operator definitions (please use GPolymorphicOperator instead): " + name);
ret first(ops);
}
}