!7 sclass MatchInput > DynPrintLogWithInput { start { dm_useLocallyCopiedMechLists(); } void update(S s) { print("\n> " + s); L tokInput = printStruct(javaTokWithAngleBracketsC(s)); new L results; // Try matching pattern & input word-by-word for (S pat : mech_englishSentencePatterns()) ai_matchAngleBracketPattern_toParseResults(javaTokWithAngleBracketsC(pat), tokInput, results); // Try expanding patterns for (S pat : mech_englishSentencePatterns()) { LS tokPat = javaTokWithAngleBracketsC(pat); for (LS spreadInput : ai_spreadAllAngleVars(tokPat, tokInput)) ai_matchAngleBracketPattern_toParseResults(tokPat, spreadInput, results); } // Go through sorted results, try to solve assumptions for (ParseResult1 p : parseResultsByNumberOfAssumptions(results)) { new L verified; for (PairS assumption : p.assumptions) { S category = assumption.a, phrase = assumption.b; if (eq(category, "")) for (S pat : mL("Noun phrase patterns")) { LPairS match = ai_matchAngleBracketPattern(javaTokWithAngleBracketsC(pat), javaTokWithAngleBracketsC(phrase)); if (match != null && empty(match)) { //print("Verified: " + assumption); verified.add(assumption); } } } if (nempty(verified)) results.add(ParseResult1(p.pat, p.input, listPlusList(p.matches, verified), listMinusList(p.assumptions, verified)); } for (ParseResult1 p : parseResultsByNumberOfAssumptions(results)) print(" [" + l(p.assumptions) + "] " + joinNemptiesWithComma(ai_renderMatchWithQuestionMarks(p.assumptions), ai_renderMatch(p.matches)) + " | pattern " + quote(joinWithSpace(p.pat)) + " for input " + quote(joinWithSpace(p.input))); } }