2. Aufgabenblatt

Jens Huthmann
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 192
Registriert: 10. Nov 2011 19:42

2. Aufgabenblatt

Beitrag von Jens Huthmann » 5. Dez 2012 17:35

Ist jetzt online.

jonas
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 177
Registriert: 5. Okt 2008 21:35
Wohnort: DA

Re: 2. Aufgabenblatt

Beitrag von jonas » 5. Dez 2012 19:24

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).

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 2. Aufgabenblatt

Beitrag von LordHoto » 5. Dez 2012 20:20

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.
Compiler 1 Tutor WS 12/13

Kai.S
Windoof-User
Windoof-User
Beiträge: 38
Registriert: 10. Apr 2010 22:22

Re: 2. Aufgabenblatt

Beitrag von Kai.S » 11. Dez 2012 15:24

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.

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 2. Aufgabenblatt

Beitrag von LordHoto » 11. Dez 2012 15:49

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;
    }
Compiler 1 Tutor WS 12/13

errt
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 18. Okt 2012 19:12

Re: 2. Aufgabenblatt

Beitrag von errt » 12. Dez 2012 10:49

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?

mf1008
Erstie
Erstie
Beiträge: 15
Registriert: 19. Okt 2008 18:05

Re: 2. Aufgabenblatt

Beitrag von mf1008 » 12. Dez 2012 11:38

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?
”+”, ”-”, ”*”, ”/”, ”//”, ”<”, ”>”, ”<=”, ”>=”, ”/\”, ”\/”
Zuletzt geändert von mf1008 am 12. Dez 2012 13:48, insgesamt 1-mal geändert.

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 2. Aufgabenblatt

Beitrag von LordHoto » 12. Dez 2012 13:05

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.
Compiler 1 Tutor WS 12/13

errt
Mausschubser
Mausschubser
Beiträge: 61
Registriert: 18. Okt 2012 19:12

Re: 2. Aufgabenblatt

Beitrag von errt » 12. Dez 2012 18:39

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.

d_glenz
Neuling
Neuling
Beiträge: 6
Registriert: 15. Jul 2011 16:36

Re: 2. Aufgabenblatt

Beitrag von d_glenz » 13. Dez 2012 14:06

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?

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 2. Aufgabenblatt

Beitrag von LordHoto » 13. Dez 2012 14:27

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.
Compiler 1 Tutor WS 12/13

StudyForFun
Windoof-User
Windoof-User
Beiträge: 24
Registriert: 30. Apr 2011 17:44

Re: 2. Aufgabenblatt

Beitrag von StudyForFun » 14. Dez 2012 00:14

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?

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 2. Aufgabenblatt

Beitrag von LordHoto » 14. Dez 2012 00:17

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.
Compiler 1 Tutor WS 12/13

Martek
Windoof-User
Windoof-User
Beiträge: 35
Registriert: 28. Sep 2009 15:48
Wohnort: Darmstadt
Kontaktdaten:

Re: 2. Aufgabenblatt

Beitrag von Martek » 17. Dez 2012 15:19

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?
Wer aufgehört hat besser zu werden, der hat aufgehört gut zu sein!

LordHoto
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 135
Registriert: 14. Dez 2009 17:00

Re: 2. Aufgabenblatt

Beitrag von LordHoto » 17. Dez 2012 16:26

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.
Compiler 1 Tutor WS 12/13

Antworten

Zurück zu „Archiv“