sbool hygienicParse1_debug, hygienicParse1_unquote; static Lisp hygienicParse1(S s) { if (hygienicParse1_debug) print("Parsing: " + s); // Simple case first S id = englishToConceptLanguage_simple(s); if (id != null) ret lisp(id); // Now the pattern matching L parses = englishToLisp_multi(s); if (hygienicParse1_debug) { int i = 0; for (Lisp l : sortByArgumentHygiene(parses)) printIndent((++i) + ". " + l + " [" + lisp_roundBracketHygieneScore(l) + "]"); } Lisp l = chooseBestArgumentHygiene(parses); ret l == null ? lispFromJavaTok(s) : hygienicParse1_sub(l); } // parse the arguments which are original strings static Lisp hygienicParse1_sub(Lisp l) { if (l == null || l.isLeaf()) ret l; Lisp x = lisp(l.head); for (Lisp a : l.args) { if (hygienicParse1_unquote) a = lisp(unquote(a.raw())); x.add(or(hygienicParse1(a.raw()), a)); } ret x; }