Nächste Seite:
Überblick (5. 10. 04)
Compilerbau
Vorlesung, Wintersemester 2004
Johannes Waldmann, HTWK Leipzig
Überblick (5. 10. 04)
Was ist ein Compiler?
Compiler zum Textsatz
Empfohlene Literatur/Links
Organisation
Leistungsnachweise
(Konkrete) Maschinen
abstrakte Maschinen
Bedeutung abstrakter Maschinen
Sprachen und Übersetzer
Arbeitsweise eines Übersetzers
Vorteile eines Compilers
Compilerbau heute?
DSL (domain specific languages)
Beispiel für DSL
Typische Probleme beim Sprach-Entwurf
Maschinenmodelle
Speichermodelle
Eine Java-ähnliche Maschine
Befehlssatz
Aufgaben (Entwurf)
Vergleich Keller/Register-Maschinen
Übung 13. 10.
Compiler kennenlernen
Kellermaschinen
Die Java-VM
Aufgabe 1
Aufgabe 2
Aufgabe 3
Kompilation für Keller-Maschinen
Befehlssatz
PostScript
Forth
Die Java-VM
Übersetzung von Ausdrücken
Übersetzung von Zuweisungen
Übersetzen von Verzweigungen
Übersetzen von Schleifen
Stacktiefe
Übungsaufgaben (20. 10.)
Unterprogramme
Definition
Parameter-Übergabe (Semantik)
Parameter-Übergabe (Implementierung)
Frames
Unterprogramme bei x86
Frame-Optimierungen
Register
Register-Windows
Unterprogramme auf Sparc
Gesamt-Analyse
Seminar 26. 10.
End-Aufrufe (tail calls) (2. 11.)
End-Aufrufe (Beispiel)
End-Rekursionen (tail recursion)
Transformationen für Tail-Calls
Seminar 3. 11. (A)
Unterprogramme mit variabler Argumentzahl
Seminar 3. 11.(C)
Geschachtelte Unterprogramme
Blockstruktur und Orthogonalität
Einschränkungen der Orthogonalität
Lokale Unterprogramme: Beispiel
Lokale Unterprogramme: Implementierung
Statische Ketten: Beispiel
Statische und Dynamische Ketten
Seminar 11. 11.: Statische Ketten
Unterprogramme als Daten
Orthogonalität (II)
Funktionen als Argumente
Zeiger auf Nested Functions
Closures
Lösung in gcc: Trampolins
Trampolin-Beispiel (Suchbild)
Funktionen als Resultate?
Funktionen als Resultate (II)
Funktionales Programmieren in Java?
Beispiel: Collections, Komparatoren
Beispiel: Ereignisbehandlung
Funktionales Programmieren in Java (II)
Typsysteme und Polymorphie
Typen
Daten und Variablen haben Typen
Typ-Kompatibilität
Typ-Prüfung bei Funkionen (Unterprogrammen)
Typsysteme
Warum gibt es überhaupt schwache Typsysteme?
Polymorphe Datentypen
Generische Polymorphie
Rechnen mit Listen in Haskell
,,Funktionales`` Programmieren
Quicksort
Seminar 24. 11.: Hugs
Seminar: Fakultät
Seminar: Typen höherer Ordnung
Seminar: Hugs und Emacs
Seminar: mergesort
Prüfung Generische Typen
Eingeschränkte Polymorphie
Interface-Vererbung
Vererbung?
Generics in Java-1.5
Lexikalische Analyse (7. 12.)
Daten-Repräsentation im Compiler
Token-Typen
Reguläre Ausdrücke/Sprachen
Beispiele/Aufgaben zu regulären Ausdrücken
Endliche Automaten
Rechnungen und Sprachen von Automaten
Anwendung von Automaten in Compilern
Automaten mit Epsilon-Übergängen
Automaten-Synthese
Automaten-Synthese (II)
Reduzierte Automaten
Deteministische Automaten
Potenzmengen-Konstruktion
Minimierung von det. Aut. (I)
Minimierung von det. Aut. (II)
Nicht reguläre Sprachen
Syntaktische Analyse (21. 12.)
Wort-Ersetzungs-Systeme
Grammatiken
Eingeschränkte Grammatiken
Die Chomsky-Hierarchie
Kontextfreie Sprachen
Ableitungsbäume für CF-Sprachen
Ableitungsbäume (II)
Aufgaben zu Grammatiken
Dangling else
Arithmetische Ausdrücke
Implementierungen von Parsern
Überblick
Rekursiver Abstieg
Rekursiver Abstieg/gnat/Übung
Rekursiver Abstieg (III)
Links-Faktorisierung
Links-Rekursion
Links-Rekursion (II)
Keller-Automaten
Keller-Automaten
Keller-Automaten (II)
Sprachen von Keller-Automaten
Keller-Automaten-Sprachen und CFG
Keller-Automaten als Parser
Übung (10./12. 12. 03) autotool/Kellerautomaten
Top-Down/Bottom-Up
Top-Down/Bottom-Up und Eindeutigkeit
Rechts/Links-Ableitungen
Rechts/Links-Ableitungen und Parser
Syntaktische Analyse mit SableCC
SableCC
Eine SableCC-Eingabe
Annotierte Grammatiken
Durchlaufen von Syntaxbäumen
Aufruf eines SableCC-Parsers
Einschätzung SableCC
Übung (12. 1.)
Semantische Analyse, Code-Generierung und -Optimierung
Compiler-Phasen
Konkreter und abstrakter Syntaxbaum
Informationen im Syntaxbaum
Zwischencode-Generierung
Common Subexpression Elimination -- CSE
Constant Propagation
Constant Folding, Strength Reduction
<
Code-Transformationen
Einfacher Matrix-Zugriff
Constant folding
strength reduction
Rückgabe
Stack-Frames
Schleifen, Code-Verschiebung
Arithmetische Umformungen
Mehr Schleifen
Daten-Fluß-Analyse
Datenfluß (II)
Linearisieren
Registervergabe
Register-Interferenz-Graph
Register-Graphen-Färbung (Heuristik)
Seminar: Registervergabe
Peephole-Optimierung, Instruction Selection
Einzelheiten zu gcc
Ergänzungen, Zusammenfassung
Compiler oder Interpreter?
Compiler
und
Interpreter
Cross-Compilation
Bootstrapping zur Selbst-Optimierung
Getrennte Kompilation
Getrennte Kompilation (II)
Modul-Schnittstellen
Geschichte des Compilerbaus
Geschichte des Compilerbaus (II)
Compilerbau: Zweck der Lehrveranstaltung
Mathematische Methoden
Datenstrukturen
Autotool-Highscore-Auswertung
Über dieses Dokument ...
Johannes Waldmann 2005-01-28