Lehrinhalte
In diesem Kurs lernen die Studierenden die Phasen eines modernen Programmiersprachen-Compilers kennen, wobei der Schwerpunkt auf den in der Praxis verwendeten Techniken liegt. Die Studierenden lernen die Implementierung von Compilerpässen in einem realen Compiler-Framework kennen. Im Rahmen des Kursprojekts müssen die Studierenden einen vollständigen Compiler für eine einfache Programmiersprache von Grund auf implementieren, der auf eine reale Maschinenbaugruppe ausgerichtet ist.
* Einführung: Struktur eines Compilers
* Lexikalische Analyse: Token, reguläre Ausdrücke, Lex
* Parsing: kontextfreie Grammatiken, prädiktives und LR-Parsing
* Abstrakte Syntax: semantische Aktionen, abstrakte Parse-Bäume
* Semantische Analyse: Symboltabellen, bindings, Typprüfung
* Zwischencode: Zwischendarstellungen, SSA, Übersetzungen
* Liveness analysis: Lösung von Datenflussgleichungen
* Befehlsauswahl: Algorithmen zur Auswahl, RISC und CISC
* Registerzuweisung: colouring by simplification, coalescing
* Echte Assemblersprache: ARM, MIPS, RISC-V, oder ähnlich
* Fortgeschrittene Themen können sein: automatische Parallelisierung, beliebte Open-Source-Compiler: GCC, LLVM, MLIR