Code: Alles auswählen
foo() do:
bar()
Code: Alles auswählen
def anon():
bar()
foo(__do__=anon)
def foo(__do__=None):
if __do__: __do__()
Ungeklärt wäre, wie so ein Block etwas zurückgeben kann. Oder anders gefragt: Was passiert bei einem "return" innerhalb eines Blocks? Sollte er nach Smalltalk-Tradition (und wie es Neal Gafter daher auch für Java vorschlägt) die umgebende Funktion beenden? Und was ist mit "break" oder "continue"?
Ich bin bestimmt nicht der erste mit dieser Idee.
Hat das schon mal jemand ausprobiert? Der offensichtliche Ansatz wäre IMHO, einen Präprozessor für den normalen Python-Interpreter zu bauen, da man das ganze über eine AST-Transformation auf normalen Python-Code abbilden kann.
Ich hatte mir neulich mal so angeschaut, was für Parser-Generatoren es für Python gibt und mich gewundert, dass offenbar keiner einen Python-Parser als Beispiel mitliefert. Dabei wäre das IMHO doch der beste Testfall. Gibt es einen in Python geschriebenen Parser, den man als Grundlage für so einen Präprozessor nutzen könnte? Müsste ja eigentlich Teil von PyPy sein, doch das Ding wirkt ehrfurchteinflößend groß ;)
Ich fand eigentlich pyparsing als Combinator-Parser ganz interessant. Gibt es dafür vielleicht bereits eine Python-Grammatik?
Gibt es andere Projekte, die mit Supersets (oder Subsets) von Python experimentieren?
Stefan