!7 sS data = [[ -- rule 1 who is x y [input] + x y is a trader [statement] => a trader -- test input john doe is a guy who is john doe? -- expected output a guy ]]; static new L> rules; // text, comment, ID p-exp { TreeMap sections = minusSignSectionsCI(data); for (S ruleID, ruleText : keysStartingWith(sections, "rule")) { new LS comments; LS lines = toLinesTrim(ruleText); for i over lines: { S s = lines.get(i); PairS p = splitTrailingSquareBracketStuff(s); if (nempty(p.b)) comments.add("in " + (i+1) + " = " + p.b); lines.set(i, p.a); } rules.add(t3(lines(lines), lines(comments), ruleID)); } pnlStruct(rules); for (S input : tlft(sections.get("test input"))) { GazelleEvalContext ctx = gazelle_stdEvalContext(rules); dm_gazelle_reasonAboutChatInput(null, input, +ctx); } } static L> dm_allRulesFromRulesModuleWithCommentsAndIDs() { ret rules; } static GazelleEvalContext dm_gazelle_stdEvalContext() { null; } static GazelleEvalContext dm_gazelle_stdEvalContext(O o) { null; }