Übungen zu Grundlagen des Übersetzerbaus

Dozenten:Kreutzer, P.; Mayer, F.
Umfang:2 SWS
Anmerkung:Übung wird im WS2018/19 NICHT angeboten!
Termin(e) & Ort:
Zielgruppe:WPF CE-MA-INF (1.-4. Semester)
WPF INF-BA (5.-6. Semester)
WPF INF-MA (ab 1. Semester)
WPF IuK-MA-ES (1.-4. Semester)
WPF IuK-MA-ES-INF (1.-4. Semester)
WF CE-BA-TW (5.-7. Semester)
WF IuK-BA (5.-6. Semester)
Inhalt:

Im Rahmen der Übungen werden die in der Vorlesung vorgestellten Konzepte und Techniken zur Implementierung eines Übersetzers in die Praxis umgesetzt. Ziel der Übungen ist es, bis zum Ende des Semesters einen funktionsfähigen Übersetzer für eine Beispiel-Programmiersprache zu implementieren.

Die hierfür nötigen zusätzlichen Kenntnisse (z.B. Grundlagen des Assemblers für PowerPC) werden in den Tafelübungen vermittelt.

Neuigkeiten

26.10.2017 In der nächsten Woche (30.10.2017 - 03.11.2017) finden keine Übungen statt; es wird jedoch ein neues Übungsblatt mit einer Projektübung (Konstantenfaltung) geben.
03.08.2017 Die Übungstermine werden in der ersten Vorlesung festgelegt. Die erste Übung findet in der zweiten Vorlesungswoche statt.
03.08.2017 Für die Teilnahme an den Übungen ist eine Anmeldung via EST zwingend erforderlich (siehe unten, mit Passwort aus Vorlesung anmelden).

Zielgruppe

Hörer der Vorlesung "Grundlagen des Übersetzerbaus"

Abgabesystem EST

Anmeldung via EST

Übungsblätter

Blatt 1 ueb01.pdf (Meilenstein 1)
(30.10.2017: Abgabe von Meilenstein 1 jetzt am 19.11.2017)
Blatt 2 ueb02.pdf
Blatt 3 ueb03.pdf (Meilenstein 2)
Beispiel zum Besucher-Entwurfsmuster, 3.1) Beispiel zu LL- und LR-Parsern, 3.2) Shift-Reduce-Parser
Blatt 4 ueb04.pdf (Meilenstein 3)
Wie man Typ-Fehler nicht vermeidet: wat
Blatt 5 ueb05.pdf
Code vor den Transformationen: TransformationInnerClasses.java, TransformationGenerics.java, IntComparator.java
Code nach den Transformationen: after_transformations.tar.gz
Interessantes Interview mit Anders Hejlsberg über moderne Compiler-Architekturen: Link
Blatt 6 ueb06.pdf
Liste benötigter JVM-Instruktionen, AST zu Aufgabe 6.3, AST zu Aufgabe 6.4
Slides vom Donnerstag
Blatt 7 ueb07.pdf
"Lösungsskizze" zu Aufgabe 7.2, "Lösungsskizze" zu Aufgabe 7.4
Blatt 8 ueb08.pdf, Lösungstemplate
V-Tables in 8.1, Klassendeskriptoren in 8.2, V-Tables und Deskriptoren in 8.3
Blatt 9 ueb09.pdf (Meilenstein 4)
Blatt 10 ueb10.pdf
Material zu Aufgabe 10.1: fib.s, exit.s
Material zu Aufgabe 10.2: fib_fail.s
Mögliche (!) Lösungen zu Aufgabe 10.4: binom_regs.s, binom_stack.s
Bitte denken Sie an die Evaluation der Übung!
Blatt 11 ueb11.pdf (Meilenstein 5, Abgabe bis 08.02.2018!)
"Lösungsskizze" zu Aufgabe 11.2 (Baumtransformationen), "Lösungsskizze" zu Aufgabe 11.3 (Graham & Glanville)
Code-Generierung in LLVM: Link
Blatt 12 ueb12.pdf
Blatt 13 ueb13.pdf

Links

Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1, Volume 2
System V ABI Link

Downloads

e2-Sprachspezifikation e2_specification.pdf (20.11.2017: exit() soll einen int zurückliefern, 09.12.2017: main() ist parameterlos)
Klassendiagramm der AST-Klassen ast_classes.pdf
Überblick über den e2-Zwischencode e2_ir.pdf
Beispiele zu Dot/Graphviz fib.dot, fib.pdf
mtab.dot, mtab.pdf
Dokumentation zu Dot/Graphviz dotguide.pdf
Exemplarische Implementierung des Dot-Generators DotGenerator.java
Exemplarische Implementierung der time()-Funktion time.s
Exemplarische Implementierung der writeInt()-Funktion in e2 writeInt.e2
Themenübersicht (grob und unvollständig!) uebersicht.txt

Evaluationsergebnisse

WS 2017 (Kreutzer, Mayer, Kraus), WS 2016 (Kreutzer)
watermark seal