Die Studierenden können:
Bewertung eines zu entwickelnden Compilers und Laufzeitsystems gemäss Aufgabenstellung(en).
ACHTUNG: DIESES MODUL ERFORDERT VIEL AUFWAND IM SEMESTER! SEHR GUTE PROGRAMMIERFÄHIGKEITEN UND GENÜGEND ZEIT RESERVEN WERDEN VORAUSSGESETZT.
Siehe oben
Programmiersprachspezifikation: Syntax und Semantik
Architektur von Compilern und Laufzeitsystemen
Lexer/Scanner
Parser (LL vs. LR), inkl. Diskussion von Generator-Tools
Zwischendarstellung (Symbol Table, Abstract Syntax Tree)
Semantic Analysis: Symbolauflösung, Type Checking, Semantic Rules
Code Generierung (für Zwischensprache und Intel 64 Prozessor)
Zwischensprachen (stack-basiert)
Virtuelle Maschine mit Loader und Interpreter
Just-In-Time Compiler (JITer) für Intel 64 Prozessoren
Elementare Laufzeitunterstützung: Stack und Heap Management
OO-Laufzeitunterstützung: Vererbung und Type Tests, Virtual Tables und Dynamic Dispatch
Garbage Collecton: Mark And Sweep, Root Set, Diskusson fortgeschrittener GCs (Copy Collector, Incremental GC, Generational/Partitoned GC)
Statische Analyse und Optimierung: Datenfluss-Analyse (je nach verfügbaren Vorlesungswochen im Semester)
Im Rahmen der Übungen entwickeln die Teilnehmer einen Compiler und eine Virtual Machine für eine Java-ähnliche Programmiersprache, inkl. Unterstützung der Objekt-Orientierung und Implementation eines GCs und Just-In-Time-Compilers.
Benötigte Technologien: Java, Intel 64 Assembler
Durchführung gemäss Stundenplan