7

Es ist mir möglich, meinen eigenen Interpreter zu erstellen, der dann in einen Compiler umgewandelt werden könnte? Wenn ja, wie gehe ich vor?Erstellen Sie Ihren eigenen Interpreter, der als Compiler funktionieren kann

+6

Könntest du etwas näher darauf eingehen? Auf welche Sprache beziehen Sie sich? Wie würde sich "ein Interpreter, der als Compiler funktionieren kann" von einem Compiler unterscheiden? – Syntactic

+0

http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –

+1

@Syntactic: Es wäre nicht anders, das ist der springende Punkt. Aber Sie müssten keinen Compiler * schreiben *. Das PyPy-Projekt verwendet dies zum Beispiel. Sie müssen nur einen sehr einfachen, einfachen Interpreter für Ihre Sprache schreiben und das PyPy-Framework generiert automatisch einen JIT-Compiler für Sie. –

Antwort

11

Dies nennt man die zweite Futamura-Projektion. Es wurde zuerst durch Prof. Yoshihiko Futamura in seinem 1971 veröffentlichten Papier Partial Evaluation of Computation Process – An approach to a Compiler-Compiler (Japanese) beschrieben, ein English version, von dem 28 Jahre später wieder veröffentlicht wurde.

Es verwendet Partial Evaluation, durch partielle Auswertung der Teil-Evaluator selbst in Bezug auf den Interpreter, so dass ein Compiler ergibt. So

, müssen Sie zwei Zutaten: ein Interpreter für Ihre Zielsprache, in einigen Host-Sprache geschrieben (die nicht die gleiche wie die Zielsprache sein können) und einem Teil Auswerter der Lage, sowohl den Interpreter zu bewerten und sich selbst, Mit anderen Worten, es muss die Host-Sprache teilweise ausgewertet werden und es muss selbst in der Host-Sprache geschrieben werden, die es auswerten kann.

+5

Mein Pop-Kultur-Addel-Gehirn liest das automatisch als * Second Futurama Projection * – kibibu

0

Eine bereits erwähnte Teilbewertung ist eine der möglichen Methoden (sehr rechenintensiv, aber ziemlich generisch). Ein anderer Ansatz ist die Metaprogrammierung: Wenn ein Interpreter einer Sprache in Form eines einfachen Übersetzers implementiert wird, der auf eine andere interpretierte Sprache abzielt, ist es sehr einfach, ihn später auf eine kompilierte Sprache umzulenken oder den Zielinterpreter durch einen Compiler zu ersetzen.

+0

@Guildenstern, danke, einen Link entfernt. –

0

Abgesehen von Futaruma-Projektionen ist ein weiterer Ansatz Meta-Tracing jit. Meta-Tracing jit verfolgt oder jit Ihre Programme nicht direkt, sondern indirekt über den Interpreter. RPython ist ein cooles Meta-Tracing-Framework. Du schreibst einen Interpreter in einer eingeschränkten Version von Python, und RPython verwandelt ihn in einen Jit-Compiler in C.

Verwandte Themen