Sprungmarken

Servicenavigation

Hauptnavigation


You are here:

Home Teaching Courses WS 2010/2011 Compilerbau (Lehrauftrag TU Dresden) (Deutsch)

Bereichsnavigation

Hauptinhalt

Compilerbau (WS 2010/2011 - TU Dresden)

There are no translations available.

Aktuelles

DatumNachricht
10.07.2011 Informationen zur mündlichen Prüfung am 27.07.2011 jetzt online.
30.03.2011 Klausureinsicht
18.03.2011 Vorläufige Klausurergebnisse jetzt online.
11.01.2011 Informationen zur Klausur jetzt online.
02.12.2010 Klausurtermin: 3. März 2011
01.09.2010 Vorlesung "Compilerbau" startet am Montag, 11.10.2010 um 09:20.

Termine der Vorlesung

Wichtig: Diese Vorlesung wird nicht in Dortmund angeboten, sondern an der TU Dresden!

Montags, 09.20 - 10.50
TOE/317

Montags, 11.10 - 12.40
INF/E010

Alle zwei Wochen an folgenden Tagen:

  • 11. Oktober 2010
  • 25. Oktober 2010
  • 8. November 2010
  • 22. November 2010
  • 6. Dezember 2010
  • 20. Dezember 2010
  • 10. Januar 2011
  • 24. Januar 2011

Kontakt

Dr. Heiko Falk
Lehrstuhl Informatik 12
Entwurfsautomatisierung für Eingebettete Systeme
Technische Universität Dortmund

Über die Vorlesung

Compiler spielen in der Informatik eine zentrale Rolle. Zum einen ist in den vergangenen Jahrzehnten zu beobachten gewesen, dass das Abstraktionsniveau, auf dem Computer programmiert werden, kontinuierlich angestiegen ist: wurden Rechner zunächst auf Maschinen- oder Assemblercode-Niveau programmiert, setzten sich anschliessend interpretierte Sprachen wie z.B. Basic durch. Diese wurden letztlich von übersetzten Sprachen wie z.B. C oder Pascal abgelöst. Heute wird im wesentlichen objektorientiert in C++ oder Java programmiert.

Zum anderen ist in den vergangenen Jahrzehnten zu beobachten gewesen, dass programmierbare Prozessoren bedeutend komplexer, mächtiger und auf Spezialzwecke ausgerichtet wurden. Beispiele dieser Entwicklung sind Befehlssatzerweiterungen für Gleitkommazahlen oder zur Beschleunigung von Multimedia-Anwendungen (bspw. Intel MMX).

Diese beiden Trends des steigenden Abstraktionsniveaus von Programmiersprachen und der zunehmenden Spezialisierung von Prozessoren divergieren. D.h., zwischen den Programmiersprachen, die heutzutage eingesetzt werden, und den Befehlssätzen moderner Prozessoren klafft eine semantische Lücke, welche stetig wächst. Diese Lücke ist durch Compiler zu schließen, die die Programmiersprache in Maschinencode übersetzen sollen. Zudem soll ein Compiler nicht nur irgend eine funktionierende Übersetzung vornehmen, sondern der erzeugte Maschinencode soll auch noch sehr effizient sein. Dies bedeutet, dass die Aufgaben eines Compilers einerseits aus der Code-Übersetzung und andererseits aus der Code-Optimierung bestehen.

Diese Vorlesung führt auf praxisnahe und algorithmische Weise in sämtliche Teilbereiche des Compilerbaus ein. Im Gegensatz zu klassischen Vorlesungen über Compilerbau wird das Schwergewicht hier nicht nur auf lexikalische, syntaktische und semantische Analyse gelegt. Vielmehr werden forschungsnahe Fragestellungen aus den Bereichen der Instruktionsauswahl, Register-Allokation und Code-Optimierung aufgegriffen. Die Vorlesung soll

  • Aufgaben von und Anforderungen an Compiler für konventionelle Desktop- bzw. Eingebettete Systeme motivieren,
  • Struktur und Aufbau derartiger Compiler aufzeigen,
  • interne Zwischendarstellungen auf verschiedenen Abstraktionsniveaus einführen,
  • die Grundlagen der Übersetzung von Hoch- in Maschinensprachen behandeln, und hauptsächlich
  • Problemstellungen und Optimierungstechniken vor allem im Backend des Compilers erläutern.

Das Schwergewicht der Veranstaltung liegt klar auf dem letzten obigen Punkt. Da Compiler oft verschiedene Zielfunktionen optimieren sollen (z.B. durchschnittliche oder worst-case Laufzeit, Energieverbrauch, Code-Größe), soll der Einfluß von Optimierungstechniken auf diese verschiedenen Zielfunktionen deutlich gemacht werden.

Gliederung der Vorlesung

  • Kapitel 0: Einordnung & Motivation der Vorlesung
  • Kapitel 1:Compiler - Abhängigkeiten und Anforderungen
    • Werkzeuge zur Code-Generierung
    • Quellsprachen für Compiler
    • Prozessor-Architekturen
    • Anforderungen an Compiler
  • Kapitel 2:Interner Aufbau von Compilern
    • Compilerphasen
    • Strukturen Optimierender Compiler
    • Zielfunktionen von Code-Optimierungen
  • Kapitel 3:Lexikalische Analyse (Scanner)
    • Von Regulären Ausdrücken zu Nichtdeterministischen Automaten
    • Von Nichtdeterministischen zu Deterministischen Automaten
    • Automaten-Minimierung
    • Praktische Umsetzung: FLEX
  • Kapitel 4:Syntaktische Analyse (Parser)
    • Einführung
    • Top-Down Syntax-Analyse
    • Bottom-Up Syntax-Analyse
    • Praktische Umsetzung: BISON
  • Kapitel 5:Semantische Analyse
    • Einführung
    • Interne Zwischendarstellungen
    • Semantische Analyse mittels Symboltabellen und BISON
  • Kapitel 6:Instruktionsauswahl
    • Einführung
    • Baum-Überdeckung mit Dynamischer Programmierung
    • Diskussion
  • Kapitel 7:Register-Allokation
    • Einführung
    • Lebendigkeitsanalyse
    • Register-Allokation durch Graph-Färbung
  • Kapitel 8:Code-Optimierung
    • HIR: Parallelisierung für Homogene Multi-DSPs
    • LIR: Generierung von Bit-Paket Operationen für NPUs
    • LIR: Optimierungen für Scratchpad-Speicher
  • Kapitel 9:Ausblick
    • Instruktionsanordnung
    • Retargierbarkeit

Mündliche Prüfung

  • Zeit und Ort: Mittwoch, 27. Juli 2011, zwischen 11.00 und 13.00 Uhr s.t., Nöthnitzer Str. 46, Raum 1043
  • Dauer: ca. 25 Minuten
  • Anmeldung und Terminabsprache: per Mail oder Telefon an das Sekretariat der Professur für Mikrorechner.