1: Theorie.- 1 Einleitung.- 1.1 Übersetzung von Programmiersprachen.- 1.2 Objektorientiertheit und objektorientierte Programmiersprachen.- 1.3 Reine und hybride objektorientierte Programmiersprachen.- 1.4 Die Programmiersprache Java.- 1.5 Überblick über die weiteren Kapitel.- 2 Objektorientierte Konzepte.- 2.1 Klassenbasierte objektorientierte Sprachen.- 2.1.1 Objekte und Klassen.- 2.1.2 Gleichheit und Kopieren von Objekten.- 2.1.3 Abstrakte Klassen und Interface-Klassen.- 2.1.4 Multi-Methoden.- 2.2 Vererbung.- 2.2.1 Einfachvererbung.- 2.2.2 Mehrfachvererbung.- 2.2.3 Dynamische Vererbung.- 2.3 Kapselung.- 2.4 Parametrisierung und generische Datentypen.- 2.5 Parametrisierung versus Vererbung.- 2.6 Polymorphismus.- 3 Übersetzung objektorientierter Konzepte und abstrakte Maschinen.- 3.1 Lose Übersetzung.- 3.1.1 Abstrakte Maschine AM.- 3.1.1.1 Laufzeitumgebung der abstrakten Maschine AM..- 3.1.1.2 Befehle der abstrakten Maschine AM.- 3.1.1.3 Adressierungsarten.- 3.1.2 Klassen und Einfachvererbung.- 3.1.3 Methodendeklarationen.- 3.1.4 Nachrichten und Methodenaufrufe.- 3.1.5 Objekte.- 3.1.6 Semiformale Beschreibung der Semantik der abstrakten Maschine.- 3.2 Smalltalk-80-Realisierung.- 3.2.1 Klassen und Einfachvererbung.- 3.2.2 Übersetzung von Methoden.- 3.2.3 Objekte.- 3.2.4 Objektverwaltung.- 3.2.5 Methodenaufruf.- 3.2.6 Die abstrakte Maschine für Smalltalk-80.- 3.3 Java-Realisierung.- 3.3.1 Klassen und einfache Vererbung.- 3.3.1.1 Einträge im Konstantenpool.- 3.3.1.2 Einträge für Instanzvariablen.- 3.3.1.3 Einträge für Methoden.- 3.3.1.4 Bemerkungen.- 3.3.2 Methodendeklarationen.- 3.3.3 Methodenaufruf und Rücksprung.- 3.3.4 Objekte.- 3.3.5 Die virtuelle Maschine von Java.- 3.4 C++-Realisierung.- 3.4.1 Methoden, Klassen und einfache Vererbung.- 3.4.2 Objekte.- 3.4.3 Methodenaufruf.- 3.4.4 Mehrfachvererbung.- 3.5 Parametrisierung.- 3.5.1 Kopierende Sicht.- 3.5.2 Echte generische Sicht.- 4 Typinferenz und Typüberprüfung.- 4.1 Typisierung und Binden.- 4.1.1 Typisierung.- 4.1.2 Binden und Methodensuche.- 4.1.3 Zusammenhang von Typisierung und Binden.- 4.1.4 Typisierungsprobleme.- 4.2 Typisierung mit Datenflußanalyse.- 4.2.1 Datenflußanalyse.- 4.2.2 Typisierung mit Datenflußanalyse.- 4.3 Typisierung mit Constraints.- 5 Optimierungen.- 5.1 Standardoptimierungen.- 5.1.1 Elimination redundanter Ausdrücke.- 5.1.2 Konstantenfaltung.- 5.1.3 Elimination toten Programmcodes.- 5.1.4 Kopien-Verbreitung.- 5.1.5 Schleifenoptimierungen.- 5.1.6 Reduktion des Operators und algebraische Umformungen.- 5.1.7 Kontrollflußoptimierungen.- 5.2 Objektorientierte Optimierungen.- 5.2.1 Intraprozedurale Klassenanalyse.- 5.2.2 Analyse der Klassenhierarchie.- 5.2.3 Effiziente Implementierung der Methodensuche.- zur Übersetzungszeit.- 5.2.4 Inkrementelle Programmentwicklung und separate Übersetzung.- 5.2.5 Klassentest.- 5.2.5.1 Einfach-Klassentest.- 5.2.5.2 Unterklassentest.- 5.2.5.3 Verwendung von Klassentests und Splitting.- 5.2.6 Funktionsexpansion.- 5.2.7 Wertbasierte Analyse und Instanzvariablen-Optimierung..- 5.2.8 Profile-Informationen.- 5.2.9 Spezialisierte Varianten: Customization.- 5.2.10 Lookup- und Inline-Caches.- 6 Speicherbereinigung.- 6.1 Nicht-inkrementelle Techniken.- 6.1.1 Mark-Scan-Speicherbereinigung.- 6.1.2 Kopierende Speicherbereinigung.- 6.1.2.1 Kopierende Speicherbereinigung mit zwei Regionen.- 6.1.2.2 Kopierende Speicherbereinigung mit Generationen.- 6.2 Inkrementelle Techniken: Referenzzählende Algorithmen.- 7 Ausblick.- 7.1 Compiler-Entwicklung.- 7.1.1 Bootstrapping und Cross-Compiler.- 7.1.2 Compiler-Generatoren.- 7.2 Varianten von Compilern.- 7.2.1 Dynamische Recompilierung.- 7.2.2 Deutsch-Schiffman-Technik.- 7.2.3 Just-In-Time Compiler.- 7.2.4 Compiler und Programmkorrektheit.- 7.3 Hardware-Unterstützung.- 2: Praxis.- 8 Compilerbaupraktikum.- 9 Java — Die Programmiersprache.- 9.1 Java-Merkmale.- 9.2 Objekte in Java.- 9.3 Ausdrücke und Statements.- 9.4 Einschränkungen.- 9.5 Aufgaben.- 10 Das MAX-System.- 10.1 Eigenschaften.- 10.2 MAX-Spezifikationen.- 10.3 Ordnungssortierte Terme.- 10.4 Occurrence- bzw. Knotensorten.- 10.5 Muster.- 10.5.1 Sondersymbole in den Mustern.- 10.5.2 Mustersyntax.- 10.6 Attribute.- 10.7 Funktionen.- 10.8 Kontextbedingungen.- 10.9 Generierung eines Java-Übersetzers mit dem MAX-System.- 10.10 Aufgaben.- 11 Befehle der virtuellen Java-Maschine.- 11.1 Konstanten auf den Keller laden.- 11.2 Lokale Variablen auf den Keller laden.- 11.3 Speichern in eine lokale Variable.- 11.4 Manipulation des Kellers.- 11.5 Behandlung von Objekten.- 11.6 Arithmetische Befehle.- 11.7 Sprungbefehle.- 11.8 Methodenaufruf und Rücksprung.- 11.9 Überprüfung der Klassenzugehörigkeit.- 11.10 Erzeugung des JVM-Codes.- 12 Übersetzerspezifikation.- 12.1 Bindungsanalyse (Identifikation).- 12.1.1 Ziele der Bindungsanalyse.- 12.1.2 Bindungsanalyse für Java.- 12.1.3 Aufgaben.- 12.2 Typdeklarationen und Typisierung.- 12.2.1 Typdeklarationen.- 12.2.2 Typisierung von Ausdrücken.- 12.2.3 Aufgaben.- 12.3 MAX-Spezifikation der Klassendatei.- 12.3.1 Aufgaben.- 12.4 Ausdrücke und ihre Codeerzeugung.- 12.4.1 Wert eines Ausdrucks.- 12.4.2 Codeerzeugung für Ausdrücke.- 12.5 Statements und ihre Codeerzeugung.- 12.5.1 Statements.- 12.5.2 Code für Statements.- 12.5.3 Ausdrücke als Statements.- 12.5.4 Aufgaben.- 12.6 Methodendeklaration.- 12.6.1 Abstrakte Syntax.- 12.6.2 Methodeneinträge in die Klassendatei.- 12.6.3 Attributierung für Method@-Knoten.- 12.7 Kellerrahmen von Java-Methodeninkarnationen.- 12.8 Methodenaufruf.- 12.8.1 Abstrakte Syntax.- 12.8.2 Methodenreferenzeinträge im Konstantenpool.- 12.8.3 JVM-Code.- 12.8.4 Attributierung für MethodCall@-Knoten.- 12.8.5 Aufgaben.- 12.9 Vererbung.- 12.9.1 Vererbung in Java.- 12.9.2 Implementierung von Vererbung.- 12.9.3 Berücksichtigung der Vererbungshierarchie.- 12.9.4 Implementierung von super.- 12.9.5 Aufgaben.- 12.10 Ausgabeschnittstelle.- 12.10.1 Java-Klassen für print-Ausgaben.- 12.10.2 Code für print-Ausgaben.- 12.10.3 Aufgaben.- Anhang A: Klassenfile und Bytecode.- Anhang B: Java-Syntax.- Literatur.