diff --git a/homework/sheet04x.md b/homework/sheet04x.md index 27fab89c..f95aa031 100644 --- a/homework/sheet04x.md +++ b/homework/sheet04x.md @@ -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 diff --git a/homework/sheet07.md b/homework/sheet07.md index fcdfd3ba..2b160dd5 100644 --- a/homework/sheet07.md +++ b/homework/sheet07.md @@ -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 --- + -## 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. diff --git a/homework/sheet07x.md b/homework/sheet07x.md new file mode 100644 index 00000000..2562f620 --- /dev/null +++ b/homework/sheet07x.md @@ -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 +--- + + + +## 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