Warning: session_start(): open(/var/lib/php/sessions/sess_do7c5o8rs9r5ldf7h5m43cmigg, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
static L smartParser1_generic(S program, O... _) {
optPar bool verbose;
new L out;
// split into paragraphs and unindent
LS paragraphs = map autoUnindent(map rtrim(tok_splitAtEmptyLines(program)));
if (verbose) print("Got " + n2(paragraphs, "parapraph"));
// print the parapraphs
if (verbose) print(joinWithEmptyLines(map(s -> indentx("> ", s), paragraphs)));
// throw away comment-only and quoted paragraphs (assume it's a title)
LS paragraphs2 = antiFilter(paragraphs, s ->
isSingleLine(trim(s)) && isQuoted(trim(s)) || countJavaTokens(s) == 0
|| endsWith(rtrim(s), "----"));
if (verbose) print("Got " + n2(paragraphs2, "filtered paragraph"));
if (verbose) print(joinWithEmptyLines(map(s -> indentx("> ", s), paragraphs2)));
// find fact paragraphs
Pair p1 = filterAntiFilter(s ->
!isSingleLine(trim(s)) && allLinesAreUnindented(s), paragraphs2);
LS multiFactParagraphs = p1.a, paragraphs3 = p1.b;
for (S para : multiFactParagraphs)
for (S s : tlft(para))
out.add(ext fact(s));
// find logic rules
new LS paragraphs4;
for (S para : paragraphs3) {
PairS p = splitAtDoubleArrow_pair(para);
if (p == null) continue with paragraphs4.add(para);
out.add(ext logicRule(para));
}
if (verbose) pnlStruct("Unparsed - assuming facts", paragraphs4);
// assume the unparsed stuff consists of facts
for (S para : paragraphs4)
out.add(ext fact(para));
ret out;
}