Humboldt-Universität zu Berlin - Mathematisch-Naturwissenschaftliche Fakultät - Systemanalyse

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 einem float (und nicht etwa mit einem int) aufgerufen werden. Diese Erleichterung gilt aber nur für Parameter von Funktionen, in allen anderen Fällen existiert weiterhin der implizite Cast von int nach float!
  • Beachten Sie bitte die Unterschiede zwischen statassignment, declassignment und assignment sowie zwischen functioncall und statfunctioncall 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 namens mindest.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, dass mindest.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 und D-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.