Skip to content

Commit ae18cc2

Browse files
committed
orga: open project topics
closes #288
1 parent 3372211 commit ae18cc2

File tree

1 file changed

+173
-160
lines changed

1 file changed

+173
-160
lines changed

homework/project.md

Lines changed: 173 additions & 160 deletions
Original file line numberDiff line numberDiff line change
@@ -1,185 +1,198 @@
11
---
22
author: BC George, Carsten Gips (HSBI)
33
no_beamer: true
4-
title: "Compiler-Projekt: DSL-gestützte Aufgaben- und Rätselbeschreibung mit
5-
Laufzeit-Interpretation in einem Spiel"
4+
title: "MIF 1.5 Kurs-Projekt: Sprachen und Compiler"
65
---
76

8-
::: tldr
9-
**Zusammenfassung**
7+
# Ziel und Rahmen
108

11-
In diesem Projekt beschäftigen Sie sich mit der Analyse, dem Entwurf und der
12-
Implementierung einer domänenspezifischen Sprache (DSL) einschließlich eines
13-
Interpreters. Ziel ist es, theoretische Grundlagen des Compilerbaus mit praktischer
14-
Laufzeitintegration in eine bestehende Spiele-Engine zu verbinden.
9+
In diesem Projekt beschäftigen Sie sich mit fortgeschrittenen Inhalten im Bereich
10+
Programmiersprachen und Compilerbau. Sie können eigenständige Ideen einbringen oder
11+
einen der nachfolgend genannten Vorschläge aufgreifen und verfeinern. Neben der
12+
praktischen Beschäftigung mit den Kurs-Themen recherchieren Sie selbstständig nach
13+
relevanter Fachliteratur und reflektieren Ihre Designentscheidungen.
1514

16-
Ihre Arbeitsergebnisse präsentieren Sie in drei Terminen über den Verlauf des
17-
Semesters.
18-
19-
**Fristen**
20-
21-
- Vorstellung der Konzepte (intern): Di, 18.11. (Praktikumsslot)
22-
- Edmonton/Minden: Vorstellung DSL-Projekt (englisch): Mo, 01.12., 18:00 - 19:00
23-
Uhr
24-
- Abschlusspräsentation: Di, 20.01. (Vorlesungs- und Praktikumsslot)
25-
26-
***Teams***
27-
28-
Die Bearbeitung erfolgt in 3er-Teams.
15+
::: center
16+
Für das MIF‑1.5‑Kursprojekt können Sie jede[^1] Idee wählen, die einen Bezug zum
17+
Compilerbau hat.
2918
:::
3019

31-
# Kurzbeschreibung
32-
33-
Didaktische Inhalte können in Serious-Games effizienter bereitgestellt werden, wenn
34-
Lehrende über eine fachnahe, deklarative Sprache arbeiten. Spiele wie beispielsweise
35-
das Dungeon-Framework (ECS, Game-Loop) haben eine entsprechende API, die Nutzung
36-
erfordert jedoch aktuell dedizierte Kenntnisse der API und der jeweiligen
37-
Programmiersprache. Eine DSL mit Interpreter schließt diese Lücke und eröffnet Raum
38-
für Forschung zu Sprachdesign, Laufzeitintegration, Event-Verarbeitung und
39-
Performanz in Game-Loops.
20+
# Passende Themen (nicht abschließend)
4021

41-
Sie entwickeln im Projekt eine domänenspezifische Sprache (DSL) zur Beschreibung
42-
fachlicher Unterrichtsaufgaben und Escape-Room-Rätsel sowie einen Interpreter, der
43-
diese Spezifikationen zur Laufzeit in ein Computer-Spiel wie das Java-basierte
44-
[Dungeon-Framework](https://github.com/Dungeon-CampusMinden/Dungeon) oder das von
45-
Ihnen parallel im Wahlmodul "Computer Games" entwickelte Spiel integriert.
22+
Umfang und geeignete Themen (Beispiele, nicht abschließend)
4623

47-
Die DSL ermöglicht Lehrenden, Aufgaben, Bewertungen und Interaktionen deklarativ zu
48-
beschreiben, ohne direkt die Spiele-API zu nutzen.
24+
- Sprachdesign (DSLs), Scanner/Parser (ANTLR, tree-sitter), Typ-/Effekt-Systeme
25+
- IR-Design und -Transformation (Intermediate Representation), z.B.
26+
[Bril](https://github.com/sampsyo/bril), SSA, Dataflow-Analysen
27+
- MLIR (Multi-Level IR): Dialektentwurf, Lowerings, Pass-Pipelines,
28+
Canonicalization
29+
- Interpreter, VM/JIT, Codegenerierung (z.B. LLVM), Linken/Laden
30+
- Statische Analysen, Verifikation, Symbolik/SMT, Transformationspipelines
31+
- E-Graphs und Equality Saturation (z.B. egg/egglog) für optimierende Umformungen
32+
- Tooling: Incremental Build/Hot-Reload, Profiling/Tracing, Debug-Infos,
33+
Fehlermeldungen
4934

50-
Der Interpreter übernimmt die initiale Levelkonfiguration, beobachtet
51-
Spielereignisse, bewertet Lösungen und interagiert zur Laufzeit mit Spieler:innen
52-
(REPL).
35+
Bitte wählen Sie einen klar abgegrenzten Scope, der in Tiefe und Breite zum Semester
36+
passt.
5337

54-
Das Projekt verfolgt zwei zentrale Fragen:
55-
56-
- Wie gestaltet man eine DSL, mit der didaktische Intentionen, Aufgabenlogik und
57-
Escape-Room-Mechaniken klar, knapp und überprüfbar ausdrückbar sind?
58-
- Wie bettet man den Interpreter technisch in ein Spiel ein (z.B. ECS-System
59-
vs. Parallel-Thread), um Spielbarkeit und Responsiveness zu garantieren und um
60-
im Interpreter auf Ereignisse (Input, Kollisionen, Zustandswechsel) reagieren zu
61-
können?
62-
63-
Das Projekt verbindet damit verschiedene Forschungsgebiete:
64-
Programmiersprachen/Compilerbau, Gamification und Serious Games sowie
65-
Softwarearchitektur in Echtzeit-/Game-Loop-Umgebungen.
66-
67-
Potentiell interessante Literatur:
38+
Potentiell interessante Literatur im Bereich DSL:
6839

6940
- @Fowler2010
7041
- @Voelter2013 (*Anmerkung*: Das Buch ist recht alt, aber die ersten drei Kapitel
7142
könnten hilfreich sein.)
7243
- @mernik2005
7344

74-
# Ziele
75-
76-
## Fachliche Ziele
77-
78-
1. Konzeption und formale Spezifikation einer DSL für die Interaktion mit dem Spiel
79-
- Beschreibung von fachliche Aufgaben (Single Choice, Multiple Choice,
80-
Zuordnung, ...)
81-
- Beschreibung von Escape-Room-Rätsel (Rätsel und Aufgaben, aber auch Elemente
82-
wie Schlösser/Schlüssel, Abhängigkeiten, Zeit-Constraints, Hinweise)
83-
- Didaktische Metadaten (Lernziele, Schwierigkeitsgrad, Tags), Randomisierung
84-
mit Seeds, Hints/Feedback
85-
- Beschreibung von Level- und Szenenkonfiguration (Geometrie, Entities, NPCs,
86-
Items, Fähigkeiten, Positionen)
87-
- Beschreibung von Bewertungslogik, Feedback, Hints, Scoring und Lernziele
88-
- Interaktion mit einem laufenden Spiel (Bewegen des Helden o.ä.)
89-
90-
\smallskip
91-
92-
2. Implementierung eines Interpreters für die DSL und Nutzung des laufenden Spiel
93-
als spezielle Laufzeitumgebung
94-
- Überführung von DSL-Artefakten in das Spiel und Konfiguration eines
95-
ausführbares Spiels
96-
- Beobachtung von und Reaktion auf Spielereignisse zur Laufzeit
97-
- Durchführung von Bewertungen, sobald Bedingungen erfüllt sind
98-
- Interaktion mit der Escape-Room-API
99-
- Erreichbarkeit über eine REPL von außen (Eingabe/Auswertung weiterer
100-
Statements zur Laufzeit)
101-
102-
Der Interpreter behandelt das laufende Spiel als eine Art erweitertes Environment.
103-
104-
## Technische Ziele
105-
106-
1. Einbindung in ein ECS-basiertes System:
107-
- als eigenes System in der Game-Loop, oder
108-
- als separater Thread mit synchronisierter Schnittstelle
109-
(Message-Queue/Command-Buffer).
110-
2. Namens- und Umgebungsauflösung:
111-
- zuerst lokaler DSL-Scope, dann Auflösung im Spiel (Entities, Komponenten,
112-
Ressourcen).
113-
- Lese-/Schreibzugriffe wirken konsistent auf den Spiel-Zustand.
114-
3. Laufzeitinteraktion:
115-
- Anzeige von Informationen, Dialogen, Aufgaben-UI (SC/MC/Zuordnung),
116-
- Eingabe/Antworterfassung und Feedback,
117-
- REPL für Debugging und Live-Inspektion.
118-
119-
# Erwartete Ergebnisse (Deliverables)
120-
121-
- Sprachspezifikation: Grammatik, Typsystem, statische Analysen,
122-
Semantikbeschreibung
123-
- Interpreter: Parser (z.B. ANTLR oder Recursive Descent), AST/IR, Evaluator,
124-
Event-Engine, Runtime-Bibliothek für Spiel-Operationen, REPL
125-
- Integration ins Spiel: Adapter zu ECS (Dungeon: Entity/Component/Systems),
126-
Event-Subscription, Name-Resolution- und State-Access-Schicht
127-
- Beispielartefakte: Katalog von Beispielaufgaben bzw. ein Escape-Room-Szenario
128-
- Demo: Live-Demonstration im Spiel, Screencast, reproduzierbares Setup
129-
(Build-Skripte, ggf. Container)
130-
131-
# Geplante Projektpräsentationen
132-
133-
## Vorstellung der Konzepte (intern)
134-
135-
Bereiten Sie pro Team eine Präsentation (ca. 20 Minuten, Di, 18.11., Praktikumsslot,
136-
Deutsch) vor, in der Sie den aktuellen Stand der Diskussion zu den zentralen
137-
Konzepten und Ideen in Ihrem Projekt vorstellen. Folgende Punkte sollten Sie
138-
abdecken:
139-
140-
- DSL-Skizze:
141-
- Zielbild, was Nutzer:innen im Spiel bzw. Dungeon mit der DSL erreichen
142-
können
143-
- Syntax und Semantik und Konzepte der DSL
144-
- Domänenmodell: technische Anbindung der DSL an das Spiel bzw. den Dungeon
145-
(Interpreter, Dungeon/Game-Loop, Abarbeitung und Interaktion)
146-
- Konkrete Minimalbeispiele zur Veranschaulichung der Konzepte
147-
148-
Betrachten Sie diesen Vortrag als einen ersten Meilenstein für Ihr Projekt und als
149-
eine Art Generalprobe für den zwei Wochen später folgenden [Talk](talk.md) auf dem
150-
Edmonton-/Minden-Meeting.
151-
152-
## Edmonton/Minden: Minden Presentations
153-
154-
Ergänzen Sie den Vortrag aus der internen Vorstellen (s.o.) um die in der
155-
Zwischenzeit erreichten Arbeitsschritte und Teilergebnisse, beispielsweise den
156-
funktionierenden Parser/AST sowie eine erste Konfigurationen im Dungeon oder Spiel
157-
("Prototyp").
158-
159-
Halten Sie Ihre Präsentation auf dem ersten Edmonton-/Minden-Meeting (Mo, 01.12.,
160-
18-19 Uhr, EN):
161-
162-
- Dauer: ca. 40-45 Minuten pro Team, parallel in Breakout-Gruppen
163-
- Ziel: Vorstellung von Idee, Problemstellung, Architektur/Design, Prototyp
164-
- Publikum: Kanadische Studierende; bitte auf klare
165-
"Problem-Ansatz-Nutzen"-Struktur achten
166-
- Sprache: Englisch
167-
168-
## Abschlusspräsentation
169-
170-
Die Abschlusspräsentation findet im Rahmen der Vorlesungs- und Praktikumszeit in der
171-
letzten Vorlesungswoche (Di, 20.01.) statt.
172-
173-
Es gelten folgende Randbedingungen:
174-
175-
- Dauer: ca. 30 Minuten pro Team (Vorlesungs- und Praktikumsslot)
176-
- Ziel: Ergebnisse, Demos, Evaluation, Lessons Learned, Ausblick
177-
- Sprache: Deutsch
45+
# Projektanregungen
46+
47+
- DSL und IR: Entwerfen Sie eine DSL zur Beschreibung von Quests/Übungsaufgaben
48+
und transformieren Sie diese in eine geeignete IR (z.B. Bril). Fokus: Grammatik,
49+
statische Checks, saubere IR-Übersetzung.
50+
51+
::: {.details title="Hinweise"}
52+
Didaktische Inhalte können in Serious-Games effizienter bereitgestellt werden,
53+
wenn Lehrende über eine fachnahe, deklarative Sprache arbeiten. Spiele wie
54+
beispielsweise das Dungeon-Framework (ECS, Game-Loop) haben eine entsprechende
55+
API, die Nutzung erfordert jedoch aktuell dedizierte Kenntnisse der API und der
56+
jeweiligen Programmiersprache. Eine DSL mit Interpreter schließt diese Lücke und
57+
eröffnet Raum für Forschung zu Sprachdesign, Laufzeitintegration,
58+
Event-Verarbeitung und Performanz in Game-Loops.
59+
60+
Sie entwickeln eine domänenspezifische Sprache (DSL) zur Beschreibung fachlicher
61+
Unterrichtsaufgaben und Escape-Room-Rätsel sowie die Übersetzung in ein
62+
geeignetes Zwischencode-Format.
63+
64+
*Anmerkung*: Die IR könnte auch MiniJava aus dem nachfolgenden Projektvorschlag
65+
sein ...
66+
:::
67+
68+
- Visualisierung von Programmabläufen in einem interaktiven Interpreter im
69+
[Dungeon](https://github.com/Dungeon-CampusMinden/Dungeon): Behandeln Sie den
70+
laufenden Dungeon als Environment des Interpreters. Variablen könnten z.b. als
71+
Komponenten an NPC/Entities abgelegt werden. Berechnungen werden damit über
72+
Dungeon-Objekte sichtbar (z.B. Datenfluss als Bewegungen/Effekte). Fokus:
73+
Semantik/Runtime-Mapping, Ereignisverarbeitung.
74+
75+
::: {.details title="Hinweise"}
76+
Sie entwickeln einen Interpreter, der z.B. einen Sub-Dialekt von Python zur
77+
Laufzeit in ein Computer-Spiel wie das Java-basierte
78+
[Dungeon-Framework](https://github.com/Dungeon-CampusMinden/Dungeon) oder das
79+
von Ihnen parallel im Wahlmodul "Computer Games" entwickelte Spiel integriert.
80+
81+
Der Interpreter übernimmt die initiale Levelkonfiguration, beobachtet
82+
Spielereignisse, bewertet Lösungen und interagiert zur Laufzeit mit
83+
Spieler:innen (REPL).
84+
:::
85+
86+
- Blockly -\> Dungeon: Parsen und Interpretieren von Blockly-Code im
87+
[Dungeon](https://github.com/Dungeon-CampusMinden/Dungeon)
88+
89+
::: {.details title="Hinweise"}
90+
Im [Dungeon-Projekt](https://github.com/Dungeon-CampusMinden/Dungeon) wurde eine
91+
Blockly-Anbindung realisiert. Dabei werden vordefinierte Rätsel im Dungeon
92+
gestartet und parallel ein Blockly-Fenster, und durch Zusammenklicken der
93+
passenden Blöcke kann man das Rätsel im Dungeon lösen. Man sieht dabei live die
94+
Auswirkungen des Blockly-Codes auf den Dungeon. Das Blockly-Projekt im Dungeon
95+
richtet sich an Programmier-Einsteiger:innen (ca. 5./6. Klasse).
96+
97+
In der vorliegenden Implementierung wurde zu jedem Block in Blockly der
98+
zugehörige Java-Code aus der Dungeon-API als Konfiguration hinterlegt. Blockly
99+
sendet diesen Code als Text über eine Remote-Schnittstelle an den laufenden
100+
Dungeon, wo der komplette Code in eine temporäre Datei gespeichert und zusammen
101+
mit der Dungeon-API und dem `javac` übersetzt wird und per Hot-Reloading in das
102+
laufende Spiel geladen wird. Das ist nicht nur sehr umständlich, sondern die
103+
Dungeon-API wird fest in den Textschnipseln von Blockly verdrahtet und ist damit
104+
anfällig für Refactoring.
105+
106+
Ziel dieses Projekt-Vorschlags ist die Entkopplung von Blockly und der
107+
Dungeon-API durch eine geeignete DSL. Für die Blöcke in Blockly soll eine
108+
einfache, vom Dungeon unabhängige DSL definiert werden. Der DSL-Code soll in
109+
einem Interpreter, der im Dungeon als "System" in der ECS-Architektur mitläuft,
110+
empfangen und verarbeitet werden und in die entsprechenden Aktionen im Dungeon
111+
umgesetzt werden.
112+
113+
Dieses Projekt kann auch mit der nachfolgenden Projekt-Anregung kombiniert
114+
werden: Der Blockly-Code wird in einem von Ihnen entwickelten Transpiler nach
115+
MiniJava übersetzt (und dann von dem im anderen Projekt entwickelten Interpreter
116+
im Dungeon interpretiert).
117+
:::
118+
119+
- MiniJava als einfache OOP-Sprache mit FP-Features für Spiel mit VSCode Extension
120+
121+
::: {.details title="Hinweise"}
122+
Im [Dungeon-Projekt](https://github.com/Dungeon-CampusMinden/Dungeon) wurde eine
123+
VSCode-Extension realisiert. In diesem Plugin kann vereinfachter Java-Code mit
124+
direkter Anbindung an die Dungeon-API geschrieben werden, der im Dungeon
125+
ausgeführt wird (über den im Blockly-Projekt beschriebenen Mechanismus
126+
"Speichern \> Javac \> Hot-Reloading) und so die vorgegebenen Rätsel löst. Das
127+
VSCode-Projekt im Dungeon richtet sich an fortgeschrittene
128+
Programmier-Einsteiger:innen (ca. 10./11. Klasse). Letztlich sind dieser
129+
vereinfachte Java-Code und die Konfiguration der Blockly-Blöcke nur eine andere
130+
Art der Schnittstelle für die selbe Verarbeitung im Dungeon, beide können
131+
relativ frei gegeneinander ausgetauscht werden.
132+
133+
Ziel dieses Projekt-Vorschlags ist die Definition einer einfachen
134+
objektorientierten Sprache ("MiniJava") mit Features aus der funktionalen
135+
Programmieren, die sich für Programmier-Einsteiger leicht verstehen lässt und an
136+
der man wichtige Programmierkonzepte einfach erlernen kann. Diese Sprache soll
137+
unabhängig von der Dungeon-API sein, aber trotzdem typische Möglichkeiten für
138+
die Interaktion in Spielen aufweisen. Für diese Sprache soll ein Interpreter
139+
entwickelt werden, der im Dungeon als "System" in der ECS-Architektur mitläuft,
140+
empfangen und verarbeitet werden und in die entsprechenden Aktionen im Dungeon
141+
umgesetzt werden. Zusätzlich soll eine VSCode-Extension realisiert werden, die
142+
Syntax-Highlighting und Autocompletion unterstützt und per Tool-Tip die
143+
jeweilige Dokumentation anzeigen kann.
144+
145+
Dieses Projekt lässt sich im Verarbeitungsteil in zwei Projekte aufteilen: Ein
146+
Projekt bearbeitet die VSCode-Extension für MiniJava, das andere Projekt
147+
realisiert den Interpreter für MiniJava im Dungeon.
148+
:::
149+
150+
- LaTeX Equation Language: Parsen und übersetzen eines LaTeX-Teilgrammatik
151+
(Arithmetik, cases, Funktionsdefinition) in ausführbaren LLVM-IR-Code oder
152+
Java-Bytecode o.ä. Ziel: Brücke von symbolischer Notation zu maschinennahem
153+
Code.
154+
155+
- MLIR/E-Graphs-Pipeline: Entwurf eines kleinen MLIR-Dialekts (z.B. arithmetische
156+
Ausdrücke) mit Lowering nach LLVM; alternativ/ergänzend Optimierung via E-Graphs
157+
(Equality Saturation) und anschließendes Lowering.
158+
159+
# Exposé (pro Team, Kurs-GitHub)
160+
161+
- Umfang: 150--400 Wörter
162+
- Struktur:
163+
1. Was wollt ihr machen?
164+
2. Warum ist das spannend?
165+
3. Wie werdet ihr das umsetzen?
166+
4. Wie könnt ihr euren Erfolg empirisch bewerten?
167+
5. Wer ist alles im Team?
168+
169+
Bitte beschreiben Sie die einzelnen Punkte so ausführlich wie nötig, um
170+
nachvollziehbar zu sein.
171+
172+
Abgabe als Beitrag in unserem [Forum im
173+
Kurs-GitHub](https://github.com/Compiler-CampusMinden/CPL-Vorlesung-Master-W25/discussions/categories/projekt-exposé),
174+
spätestens einen Tag vor der internen Projektvorstellung.
175+
176+
# Organisation
177+
178+
**Teams**: Die Bearbeitung erfolgt in 3er-Teams.
179+
180+
**Fristen**
181+
182+
- **Vorstellung der Konzepte** (intern): Di, 18.11. (Praktikumsslot, pro Team eine
183+
Präsentation von ca. 20 Minuten; das Exposé soll mind. einen Tag vorher im Forum
184+
eingestellt sein) =\> Generalprobe für den [Talk](talk.md) im
185+
Edmonton-/Minden-Meeting
186+
- **Edmonton/Minden**: Vorstellung Ihres Projekts: Mo, 01.12., 18:00 - 19:00 Uhr
187+
(pro Team eine (**englisch-sprachige**) Präsentation von ca. 40-45 Minuten plus
188+
Diskussion in Breakout-Gruppen)
189+
- **Abschlusspräsentation**: Di, 20.01. (Vorlesungs- und Praktikumsslot, pro Team
190+
eine Präsentation von ca. 30 Minuten)
178191

179192
------------------------------------------------------------------------------------
180193

181194
Wir freuen uns darauf, Sie in diesem herausfordernden und spannenden Projekt zu
182195
begleiten und wünschen Ihnen viel Erfolg!
183196

184-
Bitte stimmen Sie alle Schritte und Ergebnisse mit Ihren Dozent:innen ab und holen
185-
Sie sich aktiv Feedback.
197+
[^1]: ... for a given value of "jede" :) ... Die Idee muss zum Thema passen und vom
198+
Anspruch und Umfang her einem 10 ECTS Master-Modul angemessen sein.

0 commit comments

Comments
 (0)