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
|