Skip to content

Commit

Permalink
Homework: rework B07 (Mini-Project) (#275)
Browse files Browse the repository at this point in the history
fixes #289
  • Loading branch information
cagix authored Dec 4, 2024
1 parent e4cbf6c commit 15bb3b2
Show file tree
Hide file tree
Showing 3 changed files with 107 additions and 51 deletions.
24 changes: 12 additions & 12 deletions homework/sheet04x.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,32 +30,32 @@ Die Vorträge werden im Praktikum am 27.11. bzw. am 04.12. durchgeführt. Wir we
Teams entsprechend aufteilen, Sie bekommen eine Mail. Abgabe der Lösung und des Vortrags im
ILIAS ist für alle Teams aber bereits der 27.11. ...

**Bewertungskriterien**
## Bewertungskriterien

1. **Inhalt (50 Punkte)**
1. **Inhalt (25 Punkte)**

- **Themenverständnis (30 Punkte)**: Wurde das Thema klar und umfassend dargestellt?
- **Themenverständnis (15 Punkte)**: Wurde das Thema klar und umfassend dargestellt?
Wurde das Fachwissen adäquat vermittelt?
- **Argumentation und Nachvollziehbarkeit (20 Punkte)**: Sind die Konzepte logisch und
- **Argumentation und Nachvollziehbarkeit (10 Punkte)**: Sind die Konzepte logisch und
schlüssig aufgebaut? Werden die Aussagen durch relevante Beispiele gestützt?

2. **Struktur (30 Punkte)**
2. **Struktur (15 Punkte)**

- **Aufbau (10 Punkte)**: Gibt es eine klare Einleitung, einen strukturierten Hauptteil
- **Aufbau (5 Punkte)**: Gibt es eine klare Einleitung, einen strukturierten Hauptteil
und einen prägnanten Schluss?
- **Gestaltung (10 Punkte)**: Wurden geeignete und ansprechende visuelle Hilfsmittel
- **Gestaltung (5 Punkte)**: Wurden geeignete und ansprechende visuelle Hilfsmittel
eingesetzt (Diagramme, Abbildungen)? Unterstützen diese die Inhalte oder lenken sie
eher ab?
- **Roter Faden (10 Punkte)**: Wird der rote Faden während des gesamten Vortrags
- **Roter Faden (5 Punkte)**: Wird der rote Faden während des gesamten Vortrags
beibehalten? Ist der Zusammenhang zwischen den einzelnen Punkten nachvollziehbar?

3. **Präsentation (20 Punkte)**
3. **Präsentation (10 Punkte)**

- **Gestik, Mimik und Sprache (10 Punkte)**: Ist die Sprache klar, verständlich und
- **Gestik, Mimik und Sprache (5 Punkte)**: Ist die Sprache klar, verständlich und
angemessen? Ist die Stimmlage dynamisch und ansprechend? Ist das Tempo angemessen?
- **Zeitmanagement (10 Punkte)**: Wurde das der Zeitrahmen (20 Minuten pro Vortrag)
- **Zeitmanagement (5 Punkte)**: Wurde der Zeitrahmen (20 Minuten pro Vortrag)
eingehalten?

Gesamtbewertung: 100 Punkte
Gesamtbewertung: 50 Punkte

[Blatt 04]: sheet04.md
117 changes: 78 additions & 39 deletions homework/sheet07.md
Original file line number Diff line number Diff line change
@@ -1,63 +1,102 @@
---
archetype: assignment
title: "Blatt 07: Mini-Projekt C++"
author: "BC George, Carsten Gips (HSBI)"
author: "Carsten Gips, BC George (HSBI)"

hidden: true

sketch: true
---

<!-- pandoc -s -f markdown -t markdown+smart-grid_tables-multiline_tables-simple_tables --columns=94 --reference-links=true sheet07.md -o xxx.md -->

## A7.1: Mini-Python, Builder
## Aufgabe

Erweitern Sie Ihr Projekt zu einem Compiler, indem Sie unseren [CBuilder]
einbinden. Erzeugen Sie damit aus dem geparsten Mini-Python-Code passenden
C-Code, den Sie mit der im [CBuilder] mitgelieferten [C-Runtime] in ein
lauffähiges Programm übersetzen und ausführen können. Beachten Sie dazu
auch die [Dokumentation].
Entwickeln Sie in Ihrem 3er-Team gemeinsam einen Interpreter *oder* einen Compiler für C++.

[CBuilder]: https://github.com/Compiler-CampusMinden/Mini-Python-Builder
[C-Runtime]: https://github.com/Compiler-CampusMinden/Mini-Python-Builder/tree/master/c-runtime
[Dokumentation]: https://github.com/Compiler-CampusMinden/Mini-Python-Builder/tree/master/docs
Nutzen Sie als Implementierungssprache Java.[^1] Sie sollen ANTLR zur Erstellung Ihres Lexers
und Parsers einsetzen (Lernziel).

Entwickeln Sie verschiedene Eingabebeispiele in unterschiedlicher Komplexität, mit denen Sie
Ihren Interpreter bzw. Compiler testen können.

## A7.2: Freie Aufgabe: Zusätzliche Konzepte und Features
### Variante A: Interpreter

Überlegen Sie sich zusätzliche Konzepte und Features, die Sie in Ihren
Interpreter/Compiler einbauen wollen. Dies können zusätzliche Features
auf Sprachebene sein oder Ergänzungen/Erweiterungen Ihres Interpreters
bzw. Compilers. Geben Sie im ILIAS eine kurze Konzeptskizze als PDF ab.
Der Interpreter muss den zu interpretierenden C++-Code aus einer Datei einlesen können.

Beispiel: Sie könnten neue syntaktische Elemente in Mini-Python einführen,
die intern auf die existierende Semantik abgebildet werden ([_syntactic sugar_]).
Hier könnten Sie eine `for`-Schleife einbauen, die intern auf die bereits
existierende `while`-Schleife abgebildet wird. (Sie sollen sich aber
selbst Features überlegen - die `for`-Schleife können Sie also nicht
nehmen :-)
Sie brauchen keine interaktive Interpretation implementieren, d.h. eine REPL ist nicht
notwendig. Der Interpreter muss bei Bedarf an relevanten Stellen einen Log-Output erzeugen, um
die Arbeitsweise des Programms nachvollziehen zu können. Das Arbeitsergebnis soll auf der
Konsole ausgegeben werden.

Stellen Sie diese Ideen im Praktikum vor und verteidigen Sie diese.
### Variante B: Compiler

[_syntactic sugar_]: https://en.wikipedia.org/wiki/Syntactic_sugar
Der Compiler muss den zu kompilierenden C++-Code aus einer Datei einlesen können.

Der Compiler soll aus dem eingegebenen C++-Code passenden gültigen Java-Code erzeugen und in
eine Datei speichern. Definieren Sie ggf. nötige Hilfsbibliotheken, so dass man den
generierten Code zusammen mit den Hilfsbibliotheken mit Java übersetzen und ausführen kann.

---
### Sprachumfang

Sie sollen mindestens folgende C++-Konzepte unterstützen:

- Basisdatentypen: `bool`, `int`, `char`
- Variablen
- Arrays
- C++-Referenzen
- Zuweisungen und Expressions
- Kontrollfluss: `if`-`then`-`else`, `while`-Schleifen
- Funktionen (Definition, Deklaration, Aufrufe)
- Klassen (mit Attributen und Methoden)
- Einfach-Vererbung
- Polymorphie (dynamisch, statisch)
- Eingebaute Funktionen: `print_bool`, `print_int`, `print_char` (Ausgabe eines Werts des
jeweiligen Typs auf der Konsole)

Beachten Sie bei der Umsetzung, dass Polymorphie in C++ etwas anders funktioniert als in Java.

Andere mit C++ verbundene Konzepte wie beispielsweise Präprozessor, Header-Files, Pointer,
Templates, Sichtbarkeiten in Klassen, Trennung Deklaration/Implementierung bei Klassen
(Trennung .h und .cpp) oder Initialisierungslisten brauchen Sie nicht umsetzen.

### Projektvorstellung: Walk-Through statt Präsentation

Stellen Sie Ihr Projekt am Semesterende vor (Termine siehe Fahrplan und Ankündigung).

Jedes Team hat dafür 20 Minuten Zeit.

Gehen Sie dabei am Code durch Ihr Projekt und diskutieren Sie relevante Teile, mindestens
aber:

- Grammatik
- AST
- Semantische Analyse
- Interpreter bzw. Compiler

Demonstrieren Sie die Funktionsfähigkeit mit Ihren C++-Codebeispielen.

**Sie sollen keine Folien erstellen. Die Präsentation soll live in der IDE erfolgen.**

## Abgabeformat

Reichen Sie den als ZIP-Datei zusammengepackten Quellcode des Interpreters bzw. Compilers
elektronisch über ILIAS ein.

## Bewertungskriterien

1. **Inhalt (40 Punkte)**

## Ausblick Wochen 01 bis 04 in 2024
- **Aufgabenstellung (30 Punkte)**: Wurden alle Aspekte der Zielsprache sinnvoll
umgesetzt?
- **Argumentation und Nachvollziehbarkeit (10 Punkte)**: Sind die Konzepte logisch und
schlüssig dargestellt? Werden die Aussagen durch relevante Code-Stellen gestützt?

### Umsetzung
2. **Verschiedenes (10 Punkte)**

Setzen Sie die im Praktikum abgestimmten Features bis zum Vortrag in den letzten
beiden Sitzungen um. Nutzen Sie aktiv die freigewordenen VL-Slots.
(_Wir hatten am Anfang des Semesters absichtlich einige Praktikumstermine mit
Vorlesungen belegt, damit Sie möglichst schnell die Inhalte kennenlernen und
dann die Praktikumsaufgaben entsprechend planen und umsetzen können. Zum
Ausgleich sind nun einige Vorlesungstermine am Ende des Semesters der freien
Arbeit gewidmet._)
- **Roter Faden (5 Punkte)**: Wird der rote Faden während des gesamten Walk-Through
beibehalten? Ist der Zusammenhang zwischen den einzelnen Punkten nachvollziehbar?
- **Zeitmanagement (5 Punkte)**: Wurde der Zeitrahmen (20 Minuten pro Vortrag)
eingehalten?

### Vortrag
Gesamtbewertung: 50 Punkte

Bereiten Sie Ihren Vortrag zur Vorstellung der Ergebnisse Ihrer freien Aufgabe
(Konzeption und Umsetzung der zusätzlichen Features) in den letzten beiden
Sitzungen vor.
[^1]: Nach **Absprache** können Sie auch eine andere Implementierungssprache verwenden.
17 changes: 17 additions & 0 deletions homework/sheet07x.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
archetype: assignment
title: "Blatt 07x: Mini-Projekt C++ (IFM 5.21 CB PO18, 5. Semester)"
author: "Carsten Gips, BC George (HSBI)"

hidden: true
---

<!-- pandoc -s -f markdown -t markdown+smart-grid_tables-multiline_tables-simple_tables --columns=94 --reference-links=true sheet07x.md -o xxx.md -->

## Aufgaben

Bearbeiten Sie die auf [Blatt 07] definierten Aufgaben. Ergänzend sollen noch Pointer und
dynamische Speicherverwaltung in Java realisiert werden (vgl. Vorarbeiten auf [Blatt 06x]).

[Blatt 07]: sheet07.md
[Blatt 06x]: sheet06x.md

0 comments on commit 15bb3b2

Please sign in to comment.