Humboldt-Universität zu Berlin - Mathematisch-Naturwissenschaftliche Fakultät - Software Engineering

Compilerbau


 

Wann und Wo

Vorlesung: Montag, 13-15 Uhr, RUD 25, 3.001
Vorlesung: Donnerstag, 13-15 Uhr, RUD 25, 3.001
Übung: Dienstag, 15-17 Uhr, RUD 25, 3.001

Wer

Dozent: Prof. Grunske / Alexander Schultheiß

Beschreibung und Aufbau der Lehrveranstaltung

Studierende erlernen die Grundlagen der Analyse und der Übersetzung von Programmiersprachen und wenden diese beim Bau eines einfachen Compilers selbst an.

  • Architektur und Aufgaben eines Compilers
  • Anwendung der Theorie der Automaten (endliche Automaten, Kellerautomaten) auf Probleme des Übersetzerbaus
  • Konzepte und Techniken der lexikalischen Analyse
  • Konzepte und Techniken des Parsings (LL Analyse, LR Analysetechniken)
  • Semantische Analyse (inkl. Typerkennung, -verträglichkeit, Gültigkeitsbereiche, Abhängigkeitsanalyse)
  • Grundlagen der Codegenerierung, Codeoptimierung und Verlinkung im Überblick
  • Praktische Konstruktion eines Compilers aus den einzelnen Phasen
  • Moderne Techniken wie JIT Compilation und neuere Forschungsthemen

 

Für Studierende der SPO 2015 besteht die LV nur aus V3/Ü1 und 5 LP.

Studierende nach der SPO 2022 erhalten 8 LP.


Wechselnde in die SPO 2022, die das Modul bereits mit 5 LP absolviert haben, erbringen zusätzliche 3 LP nach dem PA-Beschluss zum "Übergang zwischen Bachelor-Studium SPO 2015 und Bachelor-Studium SPO 2022" vom 24.10.2022 mit einer erfolgreich absolvierten Zusatzaufgabe (Programmierprojekt, in dem die Studierenden einen vollständigen Compiler bestehend aus Scanner und Parser für eine neuartige Anwendungsaufgabe schreiben).

 

Terminplanung Vorlesung bis Semesterende (Änderungen möglich)

Mo, 13.00-15.00  

Thema

  Do, 13.00-15.00  

Thema

17.04.23 V Einführung Compilerbau   20.04.23 V Einführung C/Rust
24.04.23 V Lexikalische Analyse: der Scanner   27.04.23 V Lexikalische Analyse: der Scanner
01.05.23 V keine Vorlesung (Tag der Arbeit)
  04.05.23 V Syntaktische Analyse - Parsing I Grundlagen
08.05.23 V

Syntaktische Analyse – Parsing II

Methoden der Syntaxanalyse

  11.05.23 V Syntaktische Analyse - Parsing Werkzeuge
15.05.23 V Praktische Aspekte der lexikalischen Analyse   18.05.23 V keine Vorlesung (Himmelfahrt)
22.05.23 V

Syntaktische Analyse – Parsing III
Methoden der Syntaxanalyse LL(1)-Parsing

  25.05.23 V

 Syntaktische Analyse – Parsing IV

Methoden der Syntaxanalyse LL(1)-LR-Parsing

29.05.23 V keine Vorlesung (Pfingsten)   01.06.23 V

Syntaktische Analyse – Parsing V

LR-Parsing

05.06.23 V

Anwendungen des Compilerbau's

 

  08.06.23 V

Syntaktische Analyse– Parsing VI

Shift-Reduce & Präzedenz-Parsing

 

12.06.23 V

Anwendungen des Compilerbau's

  15.06.23 V

Syntaktische Analyse – Parsing VII

LR/LR(k)-Parsing (1)

19.06.23 V

Syntaktische Analyse – Parsing VIII

LR/LR(k)-Parsing (2)

  22.06.23 V

Syntaktische Analyse – Parsing IX

LR/LR(k)-Parsing (3)
26.06.23 V

Syntaktische Analyse – Parsing IX

LR/LR(k)-Parsing (4)
  29.06.23 V

 keine Vorlesung

03.07.23 V Repetitorium   06.07.23 V

Syntaktische Analyse – Parsing IX

LR/LR(k)-Parsing (5)

 

10.07.23 V

Semantische Bearbeitung + Laufzeitumgebung(en)
und Codegenerierung & Optimierung +

Zusammenfassung

  13.07.23 V keine Vorlesung
17.07.23 V keine Vorlesung   20.07.23 V keine Vorlesung
 

 

Terminplanung Übung bis Semesterende (Änderungen möglich)

Di, 15.00-17.00  

Thema

18.04.23 Ü Einführung Rust
25.04.23 Ü Einführung Rust
02.05.23 Ü

Einführung Rust

Ausgabe & Vorbesprechung Blatt 1: Rust || C

09.05.23 Ü

Nachbesprechung Blatt 1: Rust || C

Ausgabe & Vorbesprechung Blatt 2: Lexikalische Analyse

16.05.23 Ü Exkursion: Präprozessoren, Metaprogrammierung und statische Code-Variabilität
23.05.23 Ü

Nachbesprechung Blatt 2: Lexikalische Analyse

 

Ausgabe & Vorbesprechung Blatt 3: Rekursiver Abstiegsparser

 

Parsertechniken
- Funktionsweise eines rekursiven Abstiegsparsers
- Umformung von Grammatiken (praktische Übung)

30.05.23 Ü LL(1)-Syntaxanalyse (praktische Übung):
- FIRST & FOLLOW
- Tabellenaufstellung
06.06.23 Ü

Nachbesprechung Blatt 3: Rekursiver Abstiegsparser

Ausgabe & Vorbesprechung Blatt 4: Parsergenerierung

13.06.23 Ü

Projekt: Kick-Off

20.06.23 Ü

Nachbesprechung Blatt 4: Parsergenerierung

LR(0)-Syntaxanalyse (praktische Übung)

27.06.23 Ü

LR(k)-Syntaxanalyse (praktische Übung)

Semantische Bearbeitung (praktische Übung)

04.07.23 Ü Projekt: Zwischenbesprechung
11.07.23 Ü Projekt: Zwischenbesprechung
18.07.23 Ü Projekt: Finale Besprechung

 

Voraussetzungen und Prüfung

Die Lehrveranstaltung wird mit einer 120-Minuten-Klausur geprüft.

Für die Zulassung zur Prüfung ist ferner die Teilnahme am Übungsbetrieb verpflichtend.

Klausurtermin 1:01.08.2023 12:00 Uhr ESZ 115

Klausurtermin 2:09.10.2023 13:00 Uhr ESZ 110

 

Skript und Übungsaufgaben

Das Skript zu dieser Veranstaltung (Folien), Übungsblätter und weitere Materialien werden sukzessive in Moodle bereitgestellt.

Im Verlauf des Semesters werden größere Übungsaufgaben gestellt, die sich an den Inhalten der Vorlesung orientieren. Übungsaufgaben und evt Lösungsvorschläge werden ebenfalls über Moodle verfügbar sein.

Literatur

  • Kernighan, Ritchie: The C Programming Language, Prentice Hall, 2. Auflage, 1988, 1990
  • Aho, Sethi, Ullman: Compilers: Principles, Techniques und Tools, Addison-Wesley Publishing Company, 2. Auflage, 2007 (bekannt als „Drachenbuch“)
  • Wilhelm, Maurer: Übersetzerbau: Theorie, Konstruktion, Generierung, Springer Verlag, 2. Auflage
  • Fischer/LeBlanc: Crafting a Compiler with C, The Benjamin Cummings Publishing Company, 1991