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 |