5. Übersetzen und Interpretieren

BIld
Eine nahezu identische Abbildung kann man durch den Vergleich 'allgemeines Parsen' und 'Parsererzeugung und anschließendes Parsen' erhalten.

5.1 Interpreter

Ein Interpreter, führt ein Programm in seiner Quellsprache S aus. Er erhält als Eingabe das Quellprogramm und gleichzeitig die Laufzeiteingabe. Der Interpreter habe die Implementationssprache L.
output = [|source|]S [in1,...,inn] = [|int|]L [source,in1,...,inn ]
Ein Interpreter kann als Sprachdefinition eingesetzt werden.

5.2 Compiler

Ein Compiler erzeugt ein Zielprogramm in einer Zielsprache aus einem Quellprogramm in einer Quellsprache. Die Programmausführung findet hier in zwei Stufen statt :

Es gilt bei einem korrekt funktionierenden Compiler für alle Eingaben d aus D : (D ist die Menge aller möglichen Eingaben )
[|source|]S d = [| [| compiler |]L source |]T d

5.3 Compilieren, Interpretieren: Vor- und Nachteile

Ein Interpreter ist leichter zu schreiben als ein Compiler. Außerdem ist er im allgemeinen kleiner. Dies liegt daran, daß ein Interpreter keinen Code erzeugen muß, und es ist auch nur die Ausführungszeit, nicht noch zusätzlich die Übersetzungszeit wichtig. Weiterhin muß sich jemand, der einen Compiler schreibt, mit zwei verschiedenen Sprachen herumschlagen, während ein Interpreter nur die Quellsprache kennen muß. Meist werden jedoch Compiler eingesetzt, da der erzeugte Code meist wesentlich schneller als interpretierter Code ist.
Beispiel (aus "Java bis in Detail") :
Es wurde die Laufzeit einer Implementation des "Sieb des Eratosthenes" auf einem Rechner (Pentium 90 mit 32 MB RAM) in Java (interpretierter Code) und eine Übersetzung aus C++ ermittelt :

Ähnlich kann man auch das Parsen eines Strings betrachten. Man kann einen allgemeinen Parser einsetzen, der gewöhnlich sehr einfach zu schreiben ist (wird oft in Einführungskursen zu Compilerbau oder formale Sprachen vorgestellt ). Man kann aber auch einen speziellen Parser für eine bestimmte Grammatik von einem Parsergenerator erzeugen lassen, der die übergebenen Strings in viel kürzerer Zeit analysiert.
allgemein : 1 Schritt :
spezialisiert : 2 Schritte :