@@ -147,6 +147,41 @@ Potentiell interessante Literatur im Bereich DSL:
147147 realisiert den Interpreter für MiniJava im Dungeon.
148148 :::
149149
150+ - Compiler Bootstrapping: Eine kleine Sprache mit OOP- und FP-Features entwerfen
151+ und zwei Compiler bauen
152+
153+ ::: details
154+ Sie entwerfen eine kleine Sprache "X" mit OOP- und FP-Elementen.
155+
156+ Sie implementieren Compiler "A" in einer bestehenden Sprache Ihrer Wahl
157+ (Haskell, OCaml, Racket, Clojure, Java, zur Not auch Python oder Rust oder
158+ andere). Compiler A übersetzt nur ein Minimal-Subset von X: "X-min". A parst
159+ X-min, prüft Typen in einfacher Form und erzeugt Code in der gewählten
160+ Zielsprache ("transpiling").
161+
162+ Sie schreiben nun in X-min den Compiler "B", der den vollen Sprachumfang von X
163+ übersetzen kann. Sie zeigen Bootstrapping: B wird mit A gebaut und kompiliert
164+ anschließend in X formulierte Programme. B parst und kompiliert die
165+ Vollsprache X. B darf intern ein Desugaring auf den Kern verwenden.
166+
167+ Bootstrapping: B wird mit A auf die Zielplattform transpiliert. Sie kompilieren
168+ die * Quellen* von B mit dem Compiler A. Sie erhalten daraus den Compiler B in
169+ der Zielsprache (Sourcecode für B in der Zielsprache, z.B. Haskell, Java, ...).
170+ Sie bauen nun B mit dem passenden Systemwerkzeug (z.B. javac oder gcc).
171+ Verwenden sie den so entstehenden ausführbaren Compiler B, um Programme der
172+ Vollsprache X zu kompilieren.
173+
174+ Self-Hosting: Kann Ihr Compiler B sich selbst kompilieren, also kann B den in X
175+ geschriebenen Quellcode von B korrekt übersetzen?
176+
177+ Transpiling: Die Codegenerierung kann als Transpilation in eine bestehende
178+ Zielsprache (z.B. Java oder C) erfolgen. Sie brauchen also keine SSA-Phase und
179+ Assembler-Generierung o.ä. umsetzen. Der so generierte Code soll sich mit
180+ Standardwerkzeugen kompilieren oder ausführen lassen (z.B. javac, gcc, python,
181+ node). Sie sollten vermutlich eine kleine Laufzeitbibliothek in der Zielsprache
182+ mitliefern.
183+ :::
184+
150185- LaTeX Equation Language: Parsen und übersetzen eines LaTeX-Teilgrammatik
151186 (Arithmetik, cases, Funktionsdefinition) in ausführbaren LLVM-IR-Code oder
152187 Java-Bytecode o.ä. Ziel: Brücke von symbolischer Notation zu maschinennahem
0 commit comments