Compilerbaupraktikum - Aufgabenblatt 6
Generelles
Abgabetermin
kein Abgabetermin
Allgemeine Hinweise
Für alle Praktikumsaufgaben gilt, dass Einsendungen, die nicht in der jeweils mitgegebenen Testumgebung laufen, mit null Punkten bewertet werden! Das beinhaltet insbesondere alle Programme, die sich nicht fehlerfrei kompilieren lassen. Als Testsystem werden wir dabei star mit den dort installierten Compilern und Compilerwerkzeugen benutzen. Prüfen Sie bitte rechtzeitig vor der Abgabe, ob ihr Programm auch dort lauffähig ist. Die Aussage „aber bei mir zuhause hat es funktioniert“ führt entgegen mancher Erwartungen nicht zur Punktevergabe.
Ebenfalls mit null Punkten werden alle Abgaben bewertet, die sich nicht exakt an die vorgegebenen Formate halten. Hier sollen insbesondere falsch gepackte Archive erwähnt werden (die nicht alle nötigen/die falschen/zu viele Dateien enthalten, eine falsche Verzeichnisstruktur besitzen, …). Kleiner Tipp (der bisher jedes Jahr von mindestens fünf Studenten ignoriert wurde): Vor der Abgabe einfach mal selbst das Archiv auspacken und nachsehen was drin ist.
Bei Fragen wenden Sie sich bitte an Ihren Praktikumsbetreuer während des Praktikums.
Sollten wir beim persönlichen Beantworten von Fragen feststellen, dass unsere Aufgabenstellung nicht präzise genug war, so werden wir einen konkretisierenden Eintrag in der Newsgroup erstellen. Zur Bewertung wird die Aufgabenstellung inklusive aller von uns erstellten Nachrichten in der Newsgroup herangezogen. Schauen Sie daher bitte ab und zu ebendort nach, ob sich die Aufgabenstellung inzwischen eventuell leicht geändert hat und ob ihre bereits fertige Lösung nochmal bearbeitet werden muss.
Abgabemodus
Zur Lösung der Aufgaben steht für Sie eine Datei aufgabenblatt-5.tar.gz zur Verfügung.
Aufgabe 4 (100 Punkte)
Kurzbeschreibung
Implementieren Sie die Codegenerierung in das gegebene Parserfragment mit semantischer Analyse.
Aufgabenstellung
Nachdem Sie sich jetzt fast ein ganzes Semester mit den Vorarbeiten aufgehalten haben, soll in dieser Praktikumsaufgabe (endlich) der krönende Abschluss erfolgen. Ihre Aufgabe besteht darin, in den bisher entstandenen Compiler (wir geben Ihnen wieder eine Musterlösung vor) die Codegenerierung einzufügen.
Die Codegenerierungskomponente des Compilers wird/wurde in den Praktikumsveranstaltungen hinreichend besprochen. Gleiches gilt für den Grundaufbau der Zielsprache Jasmin. Zusätzlich stehen auf den in der Vorlesung genannten Seiten eine Kurzreferenz und eine Einführung in Jasmin für Sie bereit. Dort befinden sich ebenfalls Links zu D-Java
und Jasmin
(deren Handhabung und Nutzen auch im Praktikum behandelt wird/wurde). Damit sollten Sie prinzipiell mit allen nötigen Informationen versorgt sein, um die Aufgabe zu bewältigen.
Hinweise / Hilfestellungen:
- Auch bei dieser letzten Aufgabe sei nochmal darauf hingewiesen, während der Bearbeitungszeit der Aufgabe mehrmals die Newsgroup zu beobachten, da wir dort eventuell weitere Hinweise/Konkretisierungen zur Aufgabe veröffentlichen
-
Da die Bearbeitung von Parametern in Funktionen schon haarig genug ist, erleichtern wir die Aufgabe an der Stelle folgendermaßen: aktuelle Parameter und formale Parameter sind immer typgleich (nicht „nur“ typverträglich), d.h.
foo(float a)
darf nur mit einemfloat
(und nicht etwa mit einemint
) aufgerufen werden. Diese Erleichterung gilt aber nur für Parameter von Funktionen, in allen anderen Fällen existiert weiterhin der implizite Cast vonint
nachfloat
! -
Beachten Sie bitte die Unterschiede zwischen
statassignment
,declassignment
undassignment
sowie zwischenfunctioncall
undstatfunctioncall
in Bezug auf deren Wirkungsweise im Zielprogramm. - Wir werden diese Aufgabe (unter anderem) korrigieren, indem wir eine Menge von C1-Programmen mittels ihres Compilers kompilieren und die Ausgaben der Kompilate (nach Assemblierung durch Jasmin) beobachten. Es wäre also sinnvoll, wenn Sie diesen Anwendungsfall testen würden.
-
In dem
tar
-Archiv zu dieser Aufgabe befindet sich ein Beispielprogramm namensmindest.c1
. Betrachten Sie dieses Programm als minimalen Testfall. Geben Sie bitte ihre Lösung nur dann ab, wenn sie zumindest in der Lage ist dieses Programm zu kompilieren und das Kompilat nach der Assemblierung die gefordeten Ausgaben liefert. Beachten Sie auch, dassmindest.c1
wirklich nur die Mindestanforderungen abdeckt, also allein noch keine allzu hohe Punktzahl garantiert, da die interessanten C1-Konstruktionen noch nicht enthalten sind. - Es kann sein, dass im gegebenen Parser nicht alle möglichen semantischen Fehler abgefangen werden. Die fehlenden Fehlerbehandlungen müssen sie nicht nachrüsten.
-
Sie werden feststellen, dass der mittels
javac
undD-Java
generierte Jasmincode manchmal unnötig kompliziert erscheint. In diesen Fällen weisen wir Sie nochmal darauf hin, dass wir von Ihnen „lediglich“ verlangen, dass die kompilierten Programme das korrekte Verhalten zeigen. Mit welchen Befehlen Sie genau das bewerkstelligen, ist Ihnen überlassen.