| 1. | Einführung |
| 1.1 | Von der Quellsprache zur Zielmaschine |
| 1.2 | Eigenschaften der Quellsprache |
| 1.2.1 | Notation der Grundsymbole |
| 1.2.2 | Syntaktische Struktur |
| 1.2.3 | Kontextabhängigkeiten (statische Semantik) |
| 1.2.4 | Bedeutung (dynamische Semantik) |
| 1.3 | Eigenschaften der Zielmaschine |
| 2. | Übersetzerstruktur und Schnittstellen |
| 2.1 | Aufgabenorientierte Übersetzerstruktur |
| 2.1.1 | Analyse |
| 2.1.2 | Abstrakte Maschine, Zwischensprache |
| 2.1.3 | Synthese |
| 2.2 | Schnittstellen |
| 2.2.1 | Filter |
| 2.2.2 | Datenmodule |
| 2.2.3 | Übersetzerpässe |
| 2.3 | Portierung von Übersetzern |
| 2.4 | Übersetzerumgebung |
| 2.5 | Übersetzergeneratoren |
| 3. | Lexikalische Analyse |
| 3.1 | Spezifikation von Grundsymbolen |
| 3.2 | Konstruktion endlicher Automaten |
| 3.3 | Implementierung der Lexikalischen Analyse |
| 3.3.1 | Rahmen und Schnittstellen |
| 3.3.2 | Implementierung des endlichen Automaten |
| 3.4 | Generatoren |
| 4. | Syntaktische Analyse |
| 4.1 | Kontextfreie Grammatiken, abstrakte und konkrete Syntax |
| 4.2 | Zielbezogene Zerteiler |
| 4.3 | Quellbezogene Zerteiler |
| 4.4 | Behandlung syntaktischer Fehler |
| 4.5 | Zerteiler-Generatoren |
| 5. | Attributierte Grammatiken |
| 5.1 | Definition und Beispiel |
| 5.2 | Konstruktion von Attributauswertern |
| 5.2.1 | Abhängigkeitsgraphen und Zerlegungen |
| 5.2.2 | Besuchssequenzen |
| 5.2.3 | LAG - Attributauswerter |
| 5.3 | Implementierung von Attributauswertern |
| 5.4 | Generatoren für Attributauswerter |
| 6. | Semantische Analyse |
| 6.1 | Typprüfung |
| 6.2 | Bezeichneridentifikation |
| 6.2.1 | Attributierung von Gültigkeitsbereichen |
| 6.2.2 | Implementierung der Bezeichneridentifikation |
| 6.3 | Fehlerbehandlung |
| 6.4 | Zwischen-Code-Erzeugung |
| 7. | Code-Erzeugung |
| 7.1 | Eigenschaften der Zielmaschine |
| 7.1.1 | Speicherklassen |
| 7.1.2 | Operanden und Adressierungsarten |
| 7.1.3 | Instruktionen |
| 7.2 | Speicherabbildung |
| 7.2.1 | Datentypen |
| 7.2.2 | Maschinenzustand |
| 7.3 | Abbildung der Operationen |
| 7.3.1 | Prozeduraufrufe |
| 7.3.2 | Ablaufstrukturen |
| 7.3.3 | Kurzauswertung logischer Ausdrück |
| 7.3.4 | Ausdrücke |
| 7.4 | Code-Auswahl |
| 7.4.1 | Ausdrucksbäume |
| 7.4.2 | Ablaufstrukturen |
| 7.4.3 | Generatoren zur Code-Auswahl |
| 7.5 | Registerzuteilung |
| 7.5.1 | Registerzuteilung in einem Durchgang |
| 7.5.2 | Registerzuteilung für Grundblöcke in zwei Durchgängen |
| 7.5.3 | Optimale Registerzuteilung für Ausdrucksbäume |
| 7.5.4 | Registerzuteilung durch Graphfärbung |
| 7.6 | Assemblierung |
| 7.6.1 | Formatierung der Instruktionen |
| 7.6.2 | Sprungadressierung |
| 7.6.3 | Code-Datei |
| 8. | Optimierung |
| 8.1 | Verbessernde Transformationen in Grundblöcken |
| 8.1.1 | Konstantenfaltung und algebraische Vereinfachung |
| 8.1.2 | Eliminieren von Bereichsprüfungen |
| 8.1.3 | Gemeinsame Teilausdrücke |
| 8.1.4 | Überflüssige Zuweisungen |
| 8.2 | Datenflußanalyse |
| 8.2.1 | Ablaufgraphen |
| 8.2.2 | Schleifenerkennung |
| 8.2.3 | Code-Verschiebung aus Schleifen |
| 8.2.4 | Datenflußgleichungen |
| 8.2.5 | Iteratives Lösungsverfahren |
| 8.2.6 | Hierarchische Lösungsverfahren |
| 8.3 | Anwendungen der Datenflußinformation |
| 8.3.1 | Erreichende Definitionen |
| 8.3.2 | Globale gemeinsame Ausdrücke |
| 8.3.3 | Lebendige Variable |
| 8.3.4 | Redundante Berechnungen in Schleifen |
| 8.3.5 | Aliasnamen |
| 8.3.6 | Prozeduren |
| 8.4 | Nachoptimierung |
| 8.5 | Anordnung von Instruktionen |
| 8.5.1 | Parallele Funktionseinheiten |
| 8.5.2 | Fließbandverarbeitung |
| Anhang | |
| 1. | Literaturhinweise |
| 2. | Literaturverzeichnis |