[Übersetzerbau 1] Blatt 2

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

[Übersetzerbau 1] Blatt 2
1)
Bei dem Testen, ob die Implementierung der zweiten Woche richtig ist mit:

make uebung02

ist uns aufgefallen, das einige Programme die Funktion time() und exit(int) aufrufen, obwohl sie nicht deffiniert worden ist. Sie steht auch nicht in der Sprachbeschreibung. Laut dem Makefile sollen diese Programme mit “Success” enden. Das heisst time und exit muessen dann zu der Laufzeitbibliothek gehoeren, was aber nicht in der Sprachbeschreibung steht https://www2.cs.fau.de/teaching/WS2015/UE1/uebungen/language.pdf?

Sollen Funktionen der Laufzeitbibliothek neu deffiniert werden koennen? Sprich kann man im Programm z.B.: ein eigenes writeInt() implementieren, um dann diese zu verwenden, anstatt der Funktion von der Laufzeitbibliothek?


Das mit time() ist mir auch aufgefallen, wird wohl noch zur Laufzeitbibliothek hinzugefügt.
Für 2) steht in der Sprachbeschreibung “Wenn eine Variable oder Funktion definiert wird, deren Bezeichner bereits (im selben Sichtbarkeitsbereich) vergeben ist”, soll ein Fehler ausgegeben/abgebrochen werden. Da nehme ich sehr stark an, dass dies auch für die Funktionen der Laufzeitbibliothek gilt.

Was uns auch noch aufgefallen ist, in der Datei test_negativ.e, gibt es die Zeile
“d := writeInt( 0-9223372036854775808 );”
9223372036854775808 ist aber um 1 größer als Long.MAX_VALUE. Leider steht in der Sprachdefinition gar nichts darüber wie Konstanten definiert sind (bzw. wann, welcher Typ diese sind) und ob geprüft wird ob die Konstante den Wertebereich überschreitet.
Wir haben dann das Verhalten von Java implementiert (Error mit Ausgabe “Integer number too large”) was aber leider laut dem test case falsch ist.


Danke für den Hinweis.

Ich habe soeben die zwei Funktionen “[m]int exit(int)[/m]” und “[m]int time()[/m]” der Sprachbeschreibung hinzugefügt.

Die Implementierung von Aufgabe 2 betrifft das nur insofern als mehr Funktionen als vordefiniert
behandelt werden müssen.


Die Übung morgen findet aber ganz regulär statt, auch wenn keine Vorlesung ist, oder?


Ja.