!7 sclass BottomUpParser > DynPrintLogWithInput { transient S lastOutput; start { dm_useLocallyCopiedMechLists(); set flag NoFancyMechParsing. doEvery(5000, r { update(inputChooser.input()) }); } void update(fS s) { temp enter(); S rendered = hijackPrint(r { PTElement root = ai_parseBottomUpToTree(s); if (root == null) ret with print("No parse"); PTElement e = root; if (e instanceof HaveCategories) e = first(e.children); // Choose most likely reconstruction if (e instanceof ChoosePart) { WeightedProduction prod = e/ChoosePart.reconstruction.production; print("Hint: " + prod.simplificationHint); if (eq(prod.simplificationHint, "L")) print("SIMPLIFIED >> " + e/ChoosePart.a.text()); else if (eq(prod.simplificationHint, "R")) print("SIMPLIFIED >> " + e/ChoosePart.b.text()); } }); bool shouldPrint = neq(rendered, lastOutput); lastOutput = rendered; if (shouldPrint) print("\n> " + s + "\n" + rendered); } }