Warning: session_start(): open(/var/lib/php/sessions/sess_dqme04tehgol779fp404d8f289, 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
L parsePythonesqueProcedure(S proc) {
//printStruct(proc);
proc = withoutLinesEmptyAfterTrim(proc);
//printStruct(proc);
//proc = autoUnindent(proc);
proc = autoUnindent_honoringBrackets(proc);
//printStruct(proc);
//print(indentx("> ", proc));
LS l = groupPythonStyleIndents_honoringBrackets(proc);
//pnl("unpythonized ", l);
new L out;
If lastIf = null;
for i over l: {
S s = l.get(i);
LS tok = javaTokWithBrackets(s);
if (eqic(firstCodeToken(tok), "if")) {
assertEquals(s, ":", getCodeToken(tok, 2));
out.add(lastIf = new If(deRoundBracket(getCodeToken(tok, 1)),
parsePythonesqueProcedure(joinSubList(tok, 3*2)), null));
continue;
}
if (eqic(firstCodeToken(tok), "unless")) {
assertEquals(s, ":", getCodeToken(tok, 2));
out.add(lastIf = new If(deRoundBracket(getCodeToken(tok, 1)),
null, parsePythonesqueProcedure(joinSubList(tok, 3*2))));
continue;
}
if (eqic(firstCodeToken(tok), "while")) {
assertEquals(s, ":", getCodeToken(tok, 2));
out.add(new While(deRoundBracket(getCodeToken(tok, 1)),
parsePythonesqueProcedure(joinSubList(tok, 3*2))));
continue;
}
if (eqic(firstCodeToken(tok), "else") && eqic(secondCodeToken(tok), "if")) {
O last = last(out);
if (lastIf == null) fail("Else if without if");
assertEquals(s, ":", getCodeToken(tok, 3));
lastIf.elseBlock = lastIf = new If(deRoundBracket(getCodeToken(tok, 2)),
parsePythonesqueProcedure(joinSubList(tok, 4*2)), null);
continue;
}
if (eqic(firstCodeToken(tok), "else")) {
O last = last(out);
if (lastIf == null) fail("Else without if");
assertEquals(s, ":", getCodeToken(tok, 1));
lastIf.elseBlock = joinSubList(tok, 2*2);
continue;
}
lastIf = null;
if (eqic(firstCodeToken(tok), "for")) {
assertEquals(s, ":", getCodeToken(tok, 2));
S cond = getCodeToken(tok, 1);
// cond looks like: "(y | x has a y)"
cond = deRoundBracket(cond);
LS tok2 = javaTok(cond);
assertEquals(cond, "|", getCodeToken(tok2, 1));
S var = assertIdentifier(cond, getCodeToken(tok2, 0));
S actualCondition = trimJoinSubList(tok2, 2*2+1);
out.add(new For(var, actualCondition, parsePythonesqueProcedure(joinSubList(tok, 3*2))));
} else
out.add(s);
}
//pnl("Parsed procedure ", out);
ret out;
}