Compiler oder Interpreter?
Id: inter.tex,v 1.1 2004/01/28 12:09:09 joe Exp
lexikalische syntaktische ( semantische) Analyse Zwischencode
Optimierer Zielprogramm
sofortige Ausführung des Zwischencodes
Compiler und Interpreter
schließlich wird doch interpretiert: (CPU ist Interpreter für die Maschinensprache).
statt konkreter Maschine: abstrakte Maschine benutzen.
Compiler erzeugt dann abstrakten Maschinencode,
Laufzeitumgebung muß Interpreter für abstrakte Maschine enthalten (Beispiele: Java, Pascal)
gcj
)
Cross-Compilation
Id: cross.tex,v 1.1 2004/01/28 12:09:09 joe Exp
Drei Parameter (Sprachen) für einen Compiler: QIZ:
Schreiben .
Compiliere mit (auf Sparc), es entsteht .
Compiliere mit (auf Sparc), es entsteht .
Bootstrapping zur Selbst-Optimierung
Id: boot.tex,v 1.1 2004/01/28 12:09:09 joe Exp
gegeben:
(läuft lange und erzeugt langsamen Code)
Compiliere mit , ergibt
(erzeugt effizienten Code, ist aber selbst nicht effizient).
Compiliere mit , ergibt
(erzeugt effizienten Code und ist selbst effizient).
auf diese Weise auch Implementierung von Sprach-Erweiterungen.
Getrennte Kompilation
Id: sep.tex,v 1.1 2004/01/28 12:09:09 joe Exp
reale Compiler haben als Eingabe gar nicht ,,das Quellprogramm``.
größere Software besteht aus Modulen, die getrennt entwickelt und implementiert werden.
eventuell gibt es gar kein Hauptprogramm (z. B. bei Bibliotheken).
modulweise Kompilation:
Getrennte Kompilation (II)
schwierig, falls Sprache kein Modulkonzept hat (C, Pascal)
Aufgaben an Tools delegieren (Make(file), Präprozessor, Linker, Loader).
die wissen aber nicht mehr viel über die Sprache (z. B. Typen, Initialisierungs-Reihenfolgen)
schon besser sind Sprachen mit Modulen (Modula, Ada)
aber immer noch schwierig, falls (wieder einmal) das Objekt/Klassen-Konzept dafür herhalten muß (C++, Java)
Modul-Schnittstellen
Modul besteht aus Schnittstelle und Implementierung
Ideal: zur Kompilation eines Moduls soll Kenntnis der Schnittstellen der benutzen Module ausreichen.
(d. h. keine Re-Kompilation, falls sich nur andere Implementierung ändert.)
Design-Entscheidungen:
vgl: gcc/gxx: pre-compiled headers
Geschichte des Compilerbaus
Id: hist.tex,v 1.1 2004/01/28 12:09:09 joe Exp
Keller-Prinzip (siehe Vortrag von F. L. Bauer)
Details wie Symboltabellen, Fehlerbehandlung, Optimierungen ab 1970 im wesentlichen bekannt.
Geschichte des Compilerbaus (II)
seitdem neuere Entwicklungen zu
Compilerbau: Zweck der Lehrveranstaltung
Id: zweck.tex,v 1.1 2004/01/28 12:09:09 joe Exp
Bestandteile und Arbeitsweise eines Compilers verstehen,
dabei zugrundeliegende Modelle (Grammatiken, Automaten, Bäume, Graphen) und Verfahren (aus dem Grundstudium) wiedererkennen,
Fähigkeiten und Fertigkeiten im Umgang mit Compilern (gcc, javac) und Werkzeugen (make, flex, bison, javap, gdb) erwerben,
bei eigenen Projekten anwenden können:
Jedes Programm, das einen Eingabetext liest und eine Aktion ausführt, enthält Elemente eines Übersetzers (Compilers/Interpreters).
Mathematische Methoden
Datenstrukturen
Autotool-Highscore-Auswertung
320 | 29892 | Andre Heinicke |
263 | 29860 | Andreas Möhlenbrock |
196 | 27328 | Felix Franck |
121 | ... |
Preise (teilweise) gesponsort von: http://www.capitospiele.de