Compiler/Interpreter (A.
Beck) Einführung
Motivation
Implementation programmiersprachlicher Elemente in konventionellen Programmen, beispielsweise Ausdrucksberechner
Interne Ablage von Dokumenten (TEX, RTF, XML) wird mit Mitteln der Sprachverarbeitung realisiert.
Fördert das Verständnis von Programmiersprachen.
Methoden, Techniken und Algorithmen des Compilerbaus sind bei der Lösung auch anderer Probleme oft hilfreich.(Rekursion, Bäume, Tabellen, Listen, Graphen)
Compiler
Klassische Compiler haben die Aufgabe, ein Programm einer Sprache in ein äquivalentes Programm einer anderen Sprache zu überführen.
Höhere Programmiersprache -> Maschinencode
Höhere Programmiersprache -> Assemblersprache
Höhere Programmiersprache -> Höhere Sprache
Auch zur Konvertierung oder Interpretation von Daten kommen Verfahren der Übersetzertechnik zum Einsatz, beispielsweise bei XML-Parsern.
Aufbau eines Compilers dargestellt durch ein Phasenmodell nach ,Aho,
Sethi, Ullman: Compilerbau" (Drachenbuch)
Beispiel einer einfachen Übersetzung mit Zwischendarstellungen des Programmcodes
Dreiadressmaschine |
Stackmaschine |
---|---|
|
|
temp1:=inttoreal(60) |
pushAdr position |
temp2:=var3*temp1 |
pushVal init |
temp3:=var2+temp2 |
pushVal rate |
var1 := temp3 |
pushConst 60.0 |
|
mul |
|
add |
|
store |
Dreiadressmaschine |
Stackmaschine |
---|---|
|
|
temp1:=var3*inttoreal(60) |
push 60.0 |
Var1 :=var2+temp1 |
mul rate |
|
add init |
|
Store position |
Syntaxgesteuerter Einpasscompiler
Für unsere weiteren Betrachtungen sind vor allem syntaxgesteuerte Einpasscompiler von besonderer Bedeutung. Ihr Aufbau könnte etwa folgendermaen aussehen:
Interpreter
Etwas einfacher wird die ganze Codeerzeugung, wenn der zu erzeugende Code nicht für eine bestimmte reale Maschine, sondern für eine hypothetische Maschine erzeugt wird. Es handelt sich hierbei um eine Maschine, die den vom Compiler erzeugten Zwischencode ausführen kann. Eine solche hypothetische oder virtuelle Maschine kann man sich mit einem Interpreter bauen. Es wird damit damit die hypothetische Maschine auf der realen Maschine abgebildet, in dem eine klassische Rechnerarchitektur nach von Neumann nachgebildet wird(Zentrale Steuerschleife).
Das wohl bekannteste interpretierende Programmiersystem stellt das java jdk dar. Das Verfahren eines kombinierten Compiler/Interpretersystems ist aber sehr viel länger bekannt.