Neulich habe ich gezeigt, wie ein Python-Interpreter in Java aussehen könnte, der entweder als rekursiver AST-Interpreter für einen als Java-Objekte vorliegenden abstrakten Syntaxbaum (AST) oder als virtuelle Maschine für einen aus dem abstrakten Syntaxbaum abgeleiteten Maschinencode realisiert ist.
Heute möchte ich zeigen, wie man ein Python-Programm in einen AST übersetzen kann. Dies mache ich in Python. Dann kann sich das Programm selbst in einen AST übersetzen und wenn ich aus dem AST -- ebenfalls in Python -- einen Maschinencode erzeuge, brauche ich "nur noch" einen Interpreter für die virtuelle Maschine in der Zielsprache (z.B. Java) und habe dann einen vollständigen Python-Interpreter.
So der Plan.
Der Übersetzer, der aus einem Python-Programm einen AST erzeugt, geht in zwei Schnitten vor. Zuerst soll das als String vorliegende Programm in Wörter (sogenannte Token) erlegt werden. Dann analysiere ich die Liste der Token von links nach rechts mit Hilfe eines reku