| 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
|