Seite 1 von 2

2. Aufgabenblatt

Verfasst: 5. Dez 2012 17:35
von Jens Huthmann
Ist jetzt online.

Re: 2. Aufgabenblatt

Verfasst: 5. Dez 2012 19:24
von jonas
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
...und es lässt sich bei mir nicht öffnen (mit dem Standard-Archiveprogramm unter Ubuntu 12.04).

Re: 2. Aufgabenblatt

Verfasst: 5. Dez 2012 20:20
von LordHoto
jonas hat geschrieben:
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
...und es lässt sich bei mir nicht öffnen (mit dem Standard-Archiveprogramm unter Ubuntu 12.04).
Hier auf meinem Laptop geht es zumindest ohne Probleme zu öffnen. Hast du schonmal probiert die Datei nochmal mit einem anderen Programm herunterzuladen? Oder es vllt. mal auf den Poolraumrechnern probieren.

Re: 2. Aufgabenblatt

Verfasst: 11. Dez 2012 15:24
von Kai.S
Bevor jemand Probleme damit hat:
-Bei dem Beispiel auf dem Blatt fehlt "begin ... end" um die Commands.
-In der createBoolean-Methode wird nicht der Type der Expression auf StdEnvironment.booleanType gesetzt, wodurch es beim Encoder zu Fehlern kommt.

Re: 2. Aufgabenblatt

Verfasst: 11. Dez 2012 15:49
von LordHoto
Kai.S hat geschrieben:Bevor jemand Probleme damit hat:
-Bei dem Beispiel auf dem Blatt fehlt "begin ... end" um die Commands.
Stimmt und das letzte Command sollte normalerweise nicht mit ";" terminiert werden.
Kai.S hat geschrieben:-In der createBoolean-Methode wird nicht der Type der Expression auf StdEnvironment.booleanType gesetzt, wodurch es beim Encoder zu Fehlern kommt.
Stimmt, die Funktion müsste eigentlich so aussehen:

Code: Alles auswählen

    private Expression createBoolean(boolean val) {
        Identifier iAST = new Identifier(val ? "true" : "false", new SourcePosition());
        iAST.decl = val ? StdEnvironment.trueDecl : StdEnvironment.falseDecl;
        SimpleVname vAST = new SimpleVname(iAST, new SourcePosition());
        vAST.type = StdEnvironment.booleanType;
        VnameExpression boolExpression = new VnameExpression(vAST, new SourcePosition());
        boolExpression.type = StdEnvironment.booleanType;
        return boolExpression;
    }

Re: 2. Aufgabenblatt

Verfasst: 12. Dez 2012 10:49
von errt
In der vorgegebenen SymbolTable.java ist scopeStack als List<List<String>> deklariert. In den Folien wird Stack<List<String>> verwendet, was uns logischer scheint. Dürfen wir also Stack<List<String>> verwenden?

Re: 2. Aufgabenblatt

Verfasst: 12. Dez 2012 11:38
von mf1008
Die Aufzeichnung vom 04.12.2012 fehlt:
The requested URL /campus/C1-121204.avi was not found on this server.
Ebenso habe ich mit Aufgabe 2.2 noch ein Problem.
– Wenn op eine Operation mit neutralem Element ist und C1 oder C2 eben dieses neutrale Element ist, dann ersetzen Sie die Operation durch den jeweils anderen Operanden.
– Bei logischen Operationen beachten Sie die Fälle false /\ x = false bzw. true \/ x = true
Wenn man nur diese Vereinfachungsregeln anwendet, kann das nur mit einer Submenge der geforderten Menge erfolgen?
”+”, ”-”, ”*”, ”/”, ”//”, ”<”, ”>”, ”<=”, ”>=”, ”/\”, ”\/”

Re: 2. Aufgabenblatt

Verfasst: 12. Dez 2012 13:05
von LordHoto
mf1008 hat geschrieben:Ebenso habe ich mit Aufgabe 2.2 noch ein Problem.
– Wenn op eine Operation mit neutralem Element ist und C1 oder C2 eben dieses neutrale Element ist, dann ersetzen Sie die Operation durch den jeweils anderen Operanden.
– Bei logischen Operationen beachten Sie die Fälle false /\ x = false bzw. true \/ x = true
Wenn man nur diese Vereinfachungsregeln anwendet, kann dass nur mit einer Submenge der geforderten Menge erfolgen?
”+”, ”-”, ”*”, ”/”, ”//”, ”<”, ”>”, ”<=”, ”>=”, ”/\”, ”\/”
Ich sehe gerade, dass es wohl missverständlich auf dem Aufgabenblatt beschrieben ist. Die erste Zeile "C1 op C2 wird ersetzt durch das Ergebniss der binären Operation op" beschreibt das Verhalten, dass wenn C1 und C2 konstant sind, die Operation durch das Ergebnis ersetzt wird. Zusätzlich sollten die darauf folgenden Vereinfachungsregeln eingehalten werden, die auch Fälle abdecken, wenn nur genau ein Operand konstant ist. Die Version mit beiden Operanden konstant sollte auf allen angegeben Operatoren umsetzbar sein. Die weiteren Regeln, decken nicht alle Operatoren ab, ja.

Noch eine kleine Anmerkung zu der Regel mit den neutralen Elementen: Betrachtet man die Division so ist z.B. 1 nur ein rechtsneutrales Element der Division, d.h. x / 1 = x, aber nicht 1 / x = x, daher kein neutrales Element. Hier wird so weit ich es weiß nicht gefordert es zu handhaben. Ähnlich ist es mit Addition/Subtraktion mit 0 (EDIT: Addition mit 0 fällt natürlich unter die Regel mit dem neutralem Element!). bzw. Multiplikation mit 0. Ich werde das nochmal mit Herrn Huthmann klären, ob das auch gefordert ist oder nicht.
errt hat geschrieben:In der vorgegebenen SymbolTable.java ist scopeStack als List<List<String>> deklariert. In den Folien wird Stack<List<String>> verwendet, was uns logischer scheint. Dürfen wir also Stack<List<String>> verwenden?
Ja, das ist in Ordnung, es ändert ja nicht das sichtbare Interface.

Re: 2. Aufgabenblatt

Verfasst: 12. Dez 2012 18:39
von errt
LordHoto hat geschrieben: Noch eine kleine Anmerkung zu der Regel mit den neutralen Elementen: Betrachtet man die Division so ist z.B. 1 nur ein rechtsneutrales Element der Division, d.h. x / 1 = x, aber nicht 1 / x = x, daher kein neutrales Element. Hier wird so weit ich es weiß nicht gefordert es zu handhaben. Ähnlich ist es mit Addition/Subtraktion mit 0 (EDIT: Addition mit 0 fällt natürlich unter die Regel mit dem neutralem Element!). bzw. Multiplikation mit 0. Ich werde das nochmal mit Herrn Huthmann klären, ob das auch gefordert ist oder nicht.
Also wir haben das hier bis jetzt so gelöst:
Division: 1 als rechtsneutrales Element, Subtraktion 0 als rechtsneutrales Element (warum auch nicht, funktioniert ja)
Bei der Multiplikation ist die 0 kein neutrales Element, sondern Null-Element. Das haben wir nicht beachtet, da der andere Teilbaum ja potentiell Seiteneffekte haben könnte.

Re: 2. Aufgabenblatt

Verfasst: 13. Dez 2012 14:06
von d_glenz
Kann bei einer BinaryExpression mit einer Variablen z

Code: Alles auswählen

z < maxint
immer zu true evaluiert werden?

Denn z könnte (zumindest in Java/C/C++, wo z=maxint gültig wäre) zur Laufzeit ja durchaus den Wert maxint haben.
Oder ist maxint wirklich größer als alle Integer-Werte?

Re: 2. Aufgabenblatt

Verfasst: 13. Dez 2012 14:27
von LordHoto
d_glenz hat geschrieben:Kann bei einer BinaryExpression mit einer Variablen z

Code: Alles auswählen

z < maxint
immer zu true evaluiert werden?

Denn z könnte (zumindest in Java/C/C++, wo z=maxint gültig wäre) zur Laufzeit ja durchaus den Wert maxint haben.
Oder ist maxint wirklich größer als alle Integer-Werte?
maxint ist ein valider Wert, den du einem Integer zuweisen kannst. Daher gilt nicht i.A., dass

Code: Alles auswählen

z < maxint
zu true evaluiert.

Re: 2. Aufgabenblatt

Verfasst: 14. Dez 2012 00:14
von StudyForFun
Eine kurze Frage zur Aufgabe 1. Dürfen wir die vorimplementierten Versionen von HashMap, Stack und List aus der java API verwenden, um die Symboltabellen-Klasse zu implementieren oder müssen wir eigene Versionen schreiben?

Re: 2. Aufgabenblatt

Verfasst: 14. Dez 2012 00:17
von LordHoto
StudyForFun hat geschrieben:Eine kurze Frage zur Aufgabe 1. Dürfen wir die vorimplementierten Versionen von HashMap, Stack und List aus der java API verwenden, um die Symboltabellen-Klasse zu implementieren oder müssen wir eigene Versionen schreiben?
Java Standardklassen dürfen verwendet werden.

Re: 2. Aufgabenblatt

Verfasst: 17. Dez 2012 15:19
von Martek
Ich wollte nochmal fragen, wie es am sinnvollsten ist die Aufgabe 2 umzusetzen. Sollen wir einfach die Checker Funktion kopieren und alle Funktionen erst auf die Rückgabe des Originalwertes reduzieren und dann an den Stellen wo es nützlich ist die Optimierungen einbauen?

Ich habe es so probiert und habe erstmal keine Änderungen am AST eingebaut. Nach der Kompilierung sollte das Programm dann noch ohne Änderung laufen, bei mir tut es das aber nicht.

Ist mein Denkansatz falsch, oder habe ich dann einfach nur beim Minimieren der Funktionen wahrscheinlich einen Fehler gemacht?

Re: 2. Aufgabenblatt

Verfasst: 17. Dez 2012 16:26
von LordHoto
Martek hat geschrieben:Ich wollte nochmal fragen, wie es am sinnvollsten ist die Aufgabe 2 umzusetzen. Sollen wir einfach die Checker Funktion kopieren und alle Funktionen erst auf die Rückgabe des Originalwertes reduzieren und dann an den Stellen wo es nützlich ist die Optimierungen einbauen?
Man kann natürlich sich den Checker als Grundlage anschaun um nochmal nachzuvollziehen wie das Visitorprinzip in der Praxis funktioniert. Ich glaube direktes Kopieren des Checkers um an die Traversierungslogik zu kommen ist wohl nicht wirklich weniger Aufwand als es gleich selbst zu schreiben. Das sind ja nur ein "paar" visit Aufrufe. Vllt. ist noch wichtig, dass die beiden Visitors unterschiedliche Typen zurück geben in den relevanten visitFoo Funktionen. Der Checker gibt dir ja die TypeDenoter der Expressions zurück. Deine Optimierung gibt sinnvollerweise etwas anderes zurück, wie du schon erkannt hast.
Martek hat geschrieben:Ich habe es so probiert und habe erstmal keine Änderungen am AST eingebaut. Nach der Kompilierung sollte das Programm dann noch ohne Änderung laufen, bei mir tut es das aber nicht.

Ist mein Denkansatz falsch, oder habe ich dann einfach nur beim Minimieren der Funktionen wahrscheinlich einen Fehler gemacht?
Der Ansatz, dass du wie beim Checker einen Visitor implementierst, ist korrekt. Wenn du wirklich keinerleih Änderungen am AST machst, dann sollte es ja ohne Probleme funktionieren. Vllt. änderst du ja doch etwas beim AST? Es ist vllt. wichtig nur bei Expressions etwas zurückzugeben und zu sehen, wie du dort den Rückgabewert handhabst.