Warning: session_start(): open(/var/lib/php/sessions/sess_ofj7eqicf7nb0h3mf9a440gg3p, 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
!7
srecord ToParse(O text) {}
srecord StarPattern(O text) {}
srecord QuotedString(O text) {}
srecord PossibleReplacement(O a, O b) {}
cprint {
delegate TransformationTrail to TransformersOnObjects.
transient new TransformersOnObjects too;
switchable long maxSteps = 1000;
transient F1 starPatternWrapper, quotedStringMaker;
start-thread {
too.autoUnpackIterables = false;
S ruleText = [[LineByUser("a * is something like *") => Assumption("* is a noun")]];
too.add(ToParse(ruleText));
// unpack ToParse
too.addTransformer(func(ToParse x) { x.text });
too.addTransformer(f splitAtDoubleArrow_pair);
too.addTransformer(f parseFunctionCall, func(Pair x) { unparseFunctionCall(x) });
too.addTransformer(f unquote, f quote);
too.addTransformer(f pairA);
too.addTransformer(f pairB);
// TODO: generalize to more elements
too.addTransformer(
//f first,
func(L l) { print("Getting first of: " + l); ret first(l); },
(list, element) -> cloneListReplacingElementAtIndex((L) list, 0, element));
too.addTransformer(f second, (list, element) -> cloneListReplacingElementAtIndex((L) list, 1, element));
//too.addTransformer(f isStarPattern);
// Suggest enclosing a star pattern string with StarPattern()
too.addTransformer(starPatternWrapper = func(QuotedString s) {
s.text instanceof S && isStarPattern((S) s.text) ? StarPattern(s.text) : null
});
too.addTransformer(quotedStringMaker = func(S s) { isQuoted(s) ? QuotedString(unquote(s)) : null });
// Reintegrate replaced star patterns into rule text
too.addTransformer(func(StarPattern s) {
O madeFrom = too.getTrailBy(s, starPatternWrapper).argument;
ret PossibleReplacement(madeFrom, s);
});
// Same with QuotedString
too.addTransformer(func(QuotedString s) {
O madeFrom = too.getTrailBy(s, quotedStringMaker).argument;
ret PossibleReplacement(madeFrom, s);
});
too.addTransformer(func(PossibleReplacement r) {
replaceInSource(r.a, r.b);
null;
});
stepAllWithStats(too, maxSteps);
too.printWithTrails();
}
// replace a in b inside of where a came from
void replaceInSource(O a, O b) {
print(formatFunctionCall replaceInSource(a, b));
// Find trails of a
Cl trails2 = too.getTrails(a);
fOr (TransformationTrail trail2 : trails2) {
IF2 back = too.getBackTransformer(trail2.transformer);
print(" Path back: " + trail2 + " >> " + back);
if (back != null) {
// Backtransform b (if possible) and put in pool
O c = callFIfActuallyCallable(back, trail2.argument, b);
print(" >> " + c);
too.addObject(c, "replaceInSource");
}
}
}
}