Compilerbau
Aktuelles
- Die Scheine können ab dem 15.03.2010 im Sekretariat abgeholt werden.
- Die Abnahme findet am 19.02.2010 im CIP Raum Z11 statt.
- Ab 11.11.2009 finden Vorlesung und Praktikumsteil im CIP-Raum Z11 "Takla-Makan" statt.
Inhalt
Compilerbau beschäftigt sich mit der Übersetzung von Programmen von einer Hochsprache in eine maschinennahe Sprache. Dieses Praktikum vermittelt die wichtigsten Techniken zur Konstruktion eines Übersetzers anhand einer Implementierung eines Compilers von MiniJava in ausführbaren Maschinencode. mehr...
Organisation
Dozenten
Zeit und Ort
Veranstaltung | Zeit | Ort | Beginn |
---|---|---|---|
Praktikum | Mi, 14–18 Uhr | Raum 1.43 (neu: 169), Oettingenstr. 67 | 21.10.2009 |
Hörerkreis und Scheinerwerb
- Teilnehmer
- Studierende der Informatik im Hauptstudium
- Bachelorstudenten im 5. Semester können das Praktium als Modul P17, Vertiefende Themen der Informatik belegen.
- Vorkenntnisse
- Grundkenntnisse Informatik, insbesondere in Java
- Schein
- gilt für Diplomprüfung im Haupt- oder Nebenfach Informatik
- Prüfungsbereich
- PG, T
- Scheinerwerb
- Mündliche oder schriftliche Prüfung am Ende des Semesters mit Zulassungsvoraussetzung. Die Zulassungsvoraussetzung wird abhängig von der Hörerzahl zu einem späteren Zeitpunkt festgelegt und mitgeteilt werden.
Materialien
- Vorlesungsfolien - Stand: 10.02.2010 (PDF)
- MiniJava-Beispielprogramme zum Testen - Stand: 18.11.2009 (ZIP)
- Carl Offner — Notes on Graph Algorithms Used in Optimizing Compilers
- Division.mj - manuelle MiniJava-Implementierung der Ganzzahl-Division - Stand: 17.02.2010
Übung 1: Interpreter für Beispielsprache "Straightline"
Übung 2: Lexer und Parser für Beispielsprache "Straightline"
- JFlex- und JavaCUP-Spezifikationen, Testprogramm und Beispielcode (ZIP)
- Dokumentation zu den Tools
- MiniJava-Grammatik
Übung 3: Parser für MiniJava
Übung 5: Übersetzung in Zwischensprache
Übung 6: Aktivierungssätze (Frames)
Übung 7: Basisblöcke
Übung 8: Instruktionsauswahl
- Klassen für die Repräsentierung einiger x86-Assemblerinstruktionen (ZIP)
- Simulator für x86-Assembler mit beliebig vielen Registern (TAR.GZ, letzte Änderung: 28.1.) (geschrieben von Andreas Abel)
- Kurze Tabelle der x86-Assemblerinstruktionen (PDF, 2 Seiten)
- Intels Assemblerreferenz (PDF, 500 Seiten)
Übung 9: Garbage Collection
Übung 10: Aktivitätsanalyse
- SimpleGraph.java (letzte Änderung: 14.1.)
Übung 11: Registerverteilung
- Artikel mit Implementierungsdetails für eine effiziente Implementierung der Registerverteilung mit Verschmelzung: George, Appel. Iterated Register Coalescing, 1995
Übung 14: Objekt-orientierte Sprachen
- Inheritance.mj - MiniJava-Beispielprogramm zum Testen der objekt-orientierten Features
Tools
Einführung
Compilerbau beschäftigt sich mit der Übersetzung von Programmen von einer (Hoch-)sprache in eine maschinennahe Sprache. Die dazu verwendeten Methoden, wie Parsing, syntaktische und semantische Analyse, finden in zahlreichen Gebieten der Informatik Anwendung. Das Praktikum bietet interessierten Studenten die Gelegenheit, sich grundlegende Techniken in diesem Gebiet anzueignen, sowie Kentnisse in verschiedenen Gebieten, von formalen Methoden bis maschinennaher Programmierung, zu vertiefen.
In diesem Kurs werden anhand der praktischen Implementierung eines Compilers für eine vereinfachte Version von Java, MiniJava, die wichtigsten Techniken zur Konstruktion eines Übersetzers vermittelt. Dies beinhaltet das Lesen und Analysieren des Eingabeprogramms, Optimierungen des Programms zur Effizienzsteigerung, sowie die Codegenerierung für moderne Prozessoren.
Für die Programmieraufgaben stehen mehrere Tools, wie ein Parsergenerator, zur Verfügung. Die Implementierungssprache ist Java (auf Wunsch können aber auch andere Sprachen wie zum Beispiel OCaml verwendet werden).
Themen
Das Praktikum folgt dem unten angegebenen Buch Modern Compiler Implementation in Java, welches wie folgt strukturiert ist:
- Grundlagen
- Einführung
- Lexikalische Analyse
- Parsing
- Abstrakte Syntax
- Semantische Analyse
- Activation records
- Zwischensprachen
- Basisblöcke
- Instruktionsauswahl
- Lebendigkeitsanalyse
- Registerallokierung
- Fortgeschrittene Themen (werden nur teilweise im Praktikum behandelt)
- Speicherverwaltung
- Objekt-orientierte Sprachen
- Funktionale Sprachen
- Polymorphe Typen
- Datenflussanalyse
- Schleifenoptimierungen
- SSA (Static single-assignment form)
- Pipelining and scheduling
- Speicherhierarchie
Literatur
- Andrew Appel: Modern Compiler Implementation in Java, 2nd edition, Cambridge University Press. ISBN-10: 052182060X.
Artikelaktionen