sS translateUsingWordTree(S input, Map tree) { L tok = javaTok(input); for (int i = 1; i < l(tok); i += 2) translateUsingWordTree_scanFrom(tok, i, tree); ret join(tok); } svoid translateUsingWordTree_scanFrom(L tok, int i, Map tree) { int j = i; Pair bestSolution = null; // replacement, index while true { S def = cast tree.get(""); if (def != null) { bestSolution = pair(def, j); print("best solution: " + sfu(bestSolution)); } if (j >= l(tok)) break; O t = tree.get(tok.get(j)); print(j + " / " + tok.get(j) + " => " + sfu(t)); if (t == null) break; if (t instanceof S) { replaceTokens(tok, i, j+1, (S) t); ret; } tree = (Map) t; j += 2; } if (bestSolution != null) replaceTokens(tok, i, bestSolution.b-1, bestSolution.a); }