Interpreter

Interpreter übersetzen die Instruktionen eines Quellprogramms jeweils separat in ausführbaren Maschinencode und führen diese direkt auf der spezifischen Plattform aus. Im Gegensatz zu einem Compiler wird also nicht der komplette Quellcode eingelesen, analysiert und ausgeführt, sondern der Interpreter arbeitet zeilenweise die Instruktionen ab.

Interessante Varianten des klassischen Interpreters, auch und vor allem hinsichtlich der Ausführungsgeschwindigkeit von Software, sind sogenannte JIT-Compiler (Just-In-Time-Compiler) und Interpreter von Bytecode, wobei letztgenannte die Installation einer virtuellen Laufzeitumgebung, einer Virtual Machine (VM), voraussetzen.

Anwendung finden Interpreter z.B. bei Übersetzung der in den Programmiersprachen Basic, Hypertext Preprocessor (PHP), Perl, Ruby, Python oder JavaScript erstellten Programme. Bekannte Sprachen für Bytecode-Interpreter sind Java und C#.

Im Folgenden werden zunächst die grundsätzlichen Strukturen eines Interpreters erläutert.

Bei der Interpretation sind Programmübersetzung und -abarbeitung nicht zu trennen. Quellprogramm und Eingabedaten werden zur gleichen Zeit verarbeitet. Ein grobes Modell eines Interpreters kann auf folgende Weise angegeben werden:

I = I(L,I,O,f)

mit L Quellsprache, I Eingabealphabet, O Ausgabealphabet, f : L x I*<

Über dem Eingabe- bzw. Ausgabealphabet werden die Eingabe- bzw. Ausgabedaten gebildet.

Ein- und Ausgabemodell eines Interpreters

Ein- und Ausgabemodell eines Interpreters

Jede Instruktion - Vereinbarung oder Anweisung - des Quellprogramms löst Aktionen des Interpreters aus. Die Interpretation einer Instruktion bedeutet ihre Übersetzung und sofortige Abarbeitung. Die Interpretation des Quellprogramms erfolgt in der dynamischen d.h. logischen Reihenfolge der Vereinbarungen und Anweisungen des Quellprogramms. Jede interpretierte Instruktion bestimmt die nachfolgende Instruktion. Damit ergibt sich folgender Interpretationszyklus, der vollständig dem internen Befehlszyklus eines Rechners der klassischen von Neumann-Architektur entspricht:

  1. Liefere die nächste Instruktion des Programms.
  2. Bestimme die aus der Analyse der laufenden Instruktion die internen Aktionen (Interpretercode) des Interpreters.
  3. Führe die internen Aktionen aus.

Das bedeutet aber auch, dass das Quellprogramm oder eine geeignete interne Darstellung ständig während der Interpretation verfügbar sein muss. Dazu einige Anmerkungen:

  1. Aus dem Interpretationszyklus folgt, dass die Interpretation relativ langsam ist, da im Fall von Programmzyklen die Instruktionen des Quellprogramms wiederholt übersetzt werden müssen. Deshalb wird in einigen realisierten Interpreter-Systemen eine begrenzte Zahl von internen Interpretercode-Instruktionen in einem Warteschlangenspeicher abgelegt. Das Prinzip der Warteschlange besteht darin, dass zuerst gespeicherte Instruktionen auch zuerst freigegeben werden. Im Falle der Ausführung von Zyklen kann die Folge der gespeicherten Interpretercode-Instruktionen ohne Durchlaufen der Übersetzungsphase abgearbeitet werden, falls der abgespeicherte Code den vollständigen Zyklus umfasst. Damit wird eine wesentliche höhere Effizienz der Programminterpretation erreicht.
  2. Zu den Vorteilen der Interpretation zählt, dass relativ große Probleme mit Hilfe von Interpretersystemen auch auf kleinen Systemen bearbeitet werden können, da kein zusammen-hängendes Zielprogramm entsteht. Für jede Art der Instruktionen der Quellsprache (z.B. Wertzuweisung, Bedingte Anweisung...) existiert nur ein Interpretercode (Aktion) als Subroutine mit entsprechenden Parametern oder als Skelett von Maschinencode, welche nach Erkennen der entsprechenden Quellprogramm-Instruktion parametrisiert und anschließend abgearbeitet werden.
  3. Interpretersysteme bieten ausgezeichnete Möglichkeiten für die Programmentwicklung in Verbindung mit Testung und Fehlerdiagnostik.
  4. Interpretative Methoden sind sehr bedeutungsvoll für die Rechneranwendung. Beispielsweise sind Dialogsysteme Interpretersysteme ebenso wie die Steuerung der Arbeitsabläufe in Betriebssystemen durch Kommandos oder Kommandofiles interpretativ erfolgt.

Die speziellen Techniken zur Entwicklung von Interpretern sind denen vergleichbar, welche auch im Compilerbau verwendet werden. Daraus entwickelten sich weitere abgewandelte Konzepte der Interpretation von Programmcode wie JIT-Compiler und Bytecode-Interpreter, welche vor allem Geschwindigkeitsvorteile ermöglichen. Dabei ist der Just-In-Time-Compiler eine plattformabhängige Alternative der Übersetzung von Programmcode. Hier wird Maschinencode zwischengespeichert und der Binärcode wird stärker optimiert.

Bei Bytecode-Interpretern wird der komplette Programmcode zunächst in einen Zwischencode - den Bytecode - transformiert. Dieser ist unabhängig von einer Plattform und benötigt zur Ausführung die entsprechend auf die jeweilige Plattform abgestimmte virtuelle Laufzeitumgebung (Virtual Machine).

Eine traditionelle Anwendung von Interpretern ist die Programmiersprache Basic aber auch viele Anwendungen im Internet sind in modernen Scriptsprachen wie JavaScript verfasst.

Informationen zum Artikel
Deutsch: Interpreter
Englisch: interpreter
Veröffentlicht: 28.10.2013
Wörter: 635
Tags: #Sonstige Programmiersprachen
Links: Anweisung, BASIC (beginners all-purpose symbolic instruction code), Binärcode, Bytecode, Code
1