In den letzten Tagen habe ich einen Parser für Python 3.x in Java geschrieben. Er versteht z.B. `[a + 1 for a in b if 2 if 3]` oder `c(a+1 for a in b for c in d)`, auch wenn ich noch eine Reihe von Fehlern beseitigen muss. Der Parser erzeugt einen AST, den man dann im nächsten Schritt interpretieren (oder in Bytecode kompilieren) könnte.
Aus dem ersten Beispiel wird z.B.
Code: Alles auswählen
ListCompr(
Add(Var("a"), Lit(1)),
ComprIf(Lit(3),
ComprIf(Lit(2),
ComprFor(ExprList(Var(a)), Var(b)))))
Speziell für die GAE wird eine Sache einfacher: Es gibt keine Threads und man kann hemmungslos den Zustand des Systems in globalen Variablen halten. Auch definiert der Einsatzfall, einen WSGI-artigen HTTP-Request zu bearbeiten, recht genau, was man von der Standardbibliothek braucht und auf was man verzichten kann.
Für die folgenden beiden Probleme hätte ich gerne Rat (oder auch Tat): Ich kann recht leicht einen rekursiven AST-Evaluator bauen, doch damit kann ich AFAIK keine Generatoren implementieren. Was tun? Wie setzt man am besten (und dennoch effizient) Pythons Objektmodell mit all den vielen "under-under"-Methoden um oder sollte man auf diese und die Möglichkeit, Unterklassen vorhandener Klassen bauen zu können, verzichten? Wie würde sich das auf Webanwendungen auswirken?
Stefan