Links und Funktionen
Sprachumschaltung

Navigationspfad
Sie sind hier: Startseite / Lehre / WS 2017/18 / Compilerbau


Inhaltsbereich

Praktikum Compilerbau

Praktikum, 4-std., Mo. 14-18, Schöpp

Aktuelles

  • Die Abnahmen finden im Raum E107 (Oettingenstr. 67) statt.
  • Die Abgabefrist für die Implementierung des MiniJava-Compilers ist der 21.2. um 10:00 Uhr. Der Quelltext muss bis dahin in einem gitlab-Repository mit entsprechenden Zugriffsrechten eingecheckt sein.
  • Vorläufige Abnahmetermine:
    TerminGruppe
    22.2., 13:00 Uhr Enzinger, Niemeyer
    22.2., 13:45 Uhr Wahl
    22.2., 14:30 Uhr Seifert
    22.2., 15:15 Uhr Brechtmann
    22.2., 16 Uhr Lempa
    23.2., 13:00 Uhr Greth
    23.2., 13:45 Uhr Poettinger
    23.2., 14:30 Uhr Heinzelmann
    23.2., 15:15 Uhr Mieden, Meixner, Hegel
    5.3., 13:00 Uhr Nguyen, Teske

Inhalt

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 Kenntnisse in verschiedenen Gebieten, von formalen Methoden bis maschinennaher Programmierung, zu vertiefen.

In diesem Praktikum wird ein Compiler für MiniJava, eine vereinfachte Version von Java, entwickelt. Damit werden 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 wahlweise Java, OCaml, Haskell oder Rust (für weitere Vorschläge sind wir durchaus offen).

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 

Organisation

Dozenten

Zeit und Ort

VeranstaltungZeitOrtBeginn
Vorlesung Mo, 14–16 Uhr CIP-Pool (Gobi), Oettingenstr. 67 16.10.2017
Übung Mo, 16–18 Uhr CIP-Pool (Gobi), Oettingenstr. 67 16.10.2017
Praktikum 16.10.2017

Hörerkreis

Zielgruppe sind Studierende folgender Studiengänge:

  • Master (Medien-)Informatik (Praktikum zu fortgeschrittenen Themen der Informatik)
  • Diplom (Medien-)Informatik (Prüfungsbereich T)
Das Praktikum kann auch im Bachelor eingebracht werden (Vertiefende Themen der Informatik).
Voraussetzungen: gute Programmierkenntnisse, Rechnerarchitektur, Formale Sprachen 

Materialien

Alle Materialien finden Sie in folgendem git-Repository.

Übung 1: Interpreter für Beispielsprache "Straightline"

Übung 2: Lexer und Parser für MiniJava

Übung 3: Abstrakte Syntax für MiniJava

Übung 4: Typchecker

Übung 5: Übersetzung in Zwischensprache

Übung 6: Kanonisierung

  • Einfache Kanonisierung von Anweisungen: Java, Rust, SML

Übung 7: Instruktionsauswahl

Übung 8: Interferenzanalyse

Übung 9: Registerallokation

Tools


Literatur

 

Artikelaktionen


Funktionsleiste