4 Stimmen

Implementierung von Sprunganweisungen im Ast-Walking-Interpreter

In einem Ast-Walking-Interpreter wird der Code Knoten für Knoten ausgeführt. Wie kann ich Funktionen wie goto, break oder continue implementieren? Ich halte die aktuelle Ausführung an und springe zu einem anderen Knoten? Gibt es irgendwelche Best Practices?

4voto

Ira Baxter Punkte 91118

Die beste Praxis ist "interpretiere keine ASTs für Sprachen mit Gotos".

Grundsätzlich führt jede Art von Diskontinuität im Baumlauf zu einer erheblichen Verlangsamung, wenn die Sprache hauptsächlich Skalare verarbeitet. (Wenn Ihre Sprache hauptsächlich komplexe Werte verarbeitet, wie die Array-Sprache APL, spielt das keine Rolle).

Das Beste, was man sich erhoffen kann, ist, dass man den Baum im Voraus durchläuft und feststellt, wo die Gotos im AST tatsächlich hingehören, und dies in einem assoziativen Cache an der Seite aufzeichnet. Wenn Sie dann auf ein goto stoßen, konsultieren Sie einfach den Cache, anstatt den Baum zu durchsuchen.

Dies ist jedoch der erste Schritt auf dem Weg zur Kompilierung, d. h. zur Vorberechnung von Daten vor der Ausführung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X