Compilerbau 2015
Vorlesung an der DHBW Stuttgart, 2015.
Stephan
Schulz
|
Inhalte
In der Geschichte der Informatik ist eine Vielzahl von
Programmiersprachen entstanden. Diese erlauben es uns, Programme so
eindeutig zu beschreiben, dass sie von einer Maschine ausgeführt
werden können. Dabei besteht ein großer Abstand zwischen verschiedenen
Hochsprachen, die für die Beschreibung von Algorithmen und
Domänenwissen optimiert sind, und den verschiedenen Formen von
Maschinensprache, die von einer (echten oder virtuellen) Maschine
direkt ausgeführt werden können.
Dieser Abstand wird von Compilern und Interpretern überbrückt. In
dieser Vorlesung beschäftigen wir uns mit Grundlagen und Umsetzung von
Konzepten des Compilerbaus. Wir wollen dabei unter anderem die
folgenden Fragen beantworten.
- Wie werden moderne Programmiersprachen beschrieben und implementiert?
- Wie funktionieren Compiler und Interpreter
- Wie werden hochsprachliche Konzepte in maschinennahe
Darstellung umgesetzt?
- Wie kann man strukturierte Daten (wie z.B. Programmtexte) auf
verschiedenen Ebenen darstellen und verarbeiten?
Im begleitenden Labor werden wir einen funktionsfähigen Compiler für
eine einfache Sprache entwickeln.
Unterlagen
- Folienskript (Stand 20.5.2015 - engültig (?))
- Software-Dokumentation
- Übungsklausur
- Beispielcode
- nanoLang
- Lösungen zu Aufgabe 1 (benötigt Bison 3.0 oder neuer). Zum Bauen z.B.: gtar xzvf A1.tgz; cd A1; make
- A1.tgz: Minimalistische Lösung
nur auf Basis von flex.
- A1a.tgz: Komplexere
Lösung, die auch das Interface von Lexer und Parser (oder in
diesem Fall Driver) illustriert.
- Parser für nanoLang
Ausdrücke: NANOEXPR.tgz (debuggter)
- Lösungen zu Aufgabe 2 (benötigt Bison 3.0 oder neuer). Zum Bauen z.B.: gtar xzvf A2.tgz; cd A2; make
- Lösungen zu Aufgabe 3 (Build the AST)
- Lösungen zu Aufgabe 4 (Build symbol and type tables)
- Lösungen zu Aufgabe 5 (Semantische Fehler)
- Material zu Aufgabe 5 (Codegenerierung)