| Autor |
Nachricht |
|
| lamborgotti |
Verfasst am: 31 Jan 2011 20:20 |
|
|
|
Anmeldungsdatum: 21.10.2010
Beiträge: 81
|
hallo
kann es sein, dass das cjump in kanga springt, wenn der wert >1
ist wo hingegen das cjump in spiglet nur sprignt wenn der wert genau =1 ist? |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 01 Feb 2011 10:44 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
UCLA-seitig ist die Bedeutung von CJUMP in Kanga nicht genau spezifiziert: http://compilers.cs.ucla.edu/cs132/project/kanga.spec
Ich habe im Kanga-Interpreter (InterpreterVisitor, Methode caseACjumpStmt) das CJUMP-Stmt als "Springt, wenn Wert ungleich 1" wie in Piglet implementiert. Die Kanga-Beispielprogramme liefern so die erwarteten Ergebnisse. |
|
|
| Nach oben |
|
| lamborgotti |
Verfasst am: 01 Feb 2011 14:16 |
|
|
|
Anmeldungsdatum: 21.10.2010
Beiträge: 81
|
und was heisst das jetzt?
naja ich bin der meinung, es ist so, das es unterschiedlich ist,
das spielt aber nur bei spigletprogrammen eine rolle die nicht aus einem minijava entstehten, weil der minijava macht per typtest ja dass da nur bool also nur 0 oder 1 sein kann
aber wenn ichein spiglet schreibe von hand, das wo ich
cjump 2 label1
mache dann ist das unterschiedlich |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 01 Feb 2011 15:15 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
"Es" ist also unterschiedlich. Nochmal: was unterscheidet sich wovon?
Spezifikation von CJUMP in Piglet
Spezifikation von CJUMP in Spiglet
Spezifikation von CJUMP in Kanga
Verhalten von CJUMP in UCLA-Piglet-Interpreter
Verhalten von CJUMP in UCLA-Kanga-Interpreter
Verhalten von CJUMP in unserem Piglet-Interpreter
Verhalten von CJUMP in unserem Kanga-Interpreter
Deine Vorstellung, wie sich CJUMP in Kanga verhalten sollte
? |
|
|
| Nach oben |
|
| lamborgotti |
Verfasst am: 01 Feb 2011 16:13 |
|
|
|
Anmeldungsdatum: 21.10.2010
Beiträge: 81
|
Verhalten von CJUMP in unserem Piglet-Interpreter
von
Verhalten von CJUMP in unserem Kanga-Interpreter
also das was uns betrifft
aber wie gesagt, es ist nicht schlimm, wenn mans weiss und nicht solche wizigen testfälle macht |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 01 Feb 2011 16:28 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
Jetzt versteh ich Dich. Tatsache: in Methode
piglet.test.interpreter.Evaluator.caseACjumpStmt
weicht das Verhalten meines Piglet-Interpreters ("Spring, wenn der Wert ==0 ist") vom spezifizierten Verhalten ("Spring wenn der Wert !=1 ist") ab. Programme, die Zahlen ausser 0 und 1 in CJUMP hineinreichen, werden fehlerhaft ausgefuehrt.
Generiert jemand solche Programme? Dann bring ich nen Patch fuer den Piglet-Interpreter raus. |
|
|
| Nach oben |
|
| konrada |
Verfasst am: 01 Feb 2011 18:30 |
|
|
|
Anmeldungsdatum: 19.10.2009
Beiträge: 160
Wohnort: Freiburg
|
Angesichts des Vorrats an Branch-Instruktionen im MIPS-Befehlssatz kann ich von CJUMP auf Werten ungleich {0,1} nur abraten. Wenn man von einem CJUMP ausgeht, in das nur Werte {0,1} hineinkommen, dann kann man es mit einem 'beqz' (Branch if equal to zero) abbilden. Wenn man das kranke CJUMP voll ausnutzt (also Werte nicht aus {0,1} hineinsteckt), wird in ex6 die Uebersetzung schwieriger.
Ich empfehle daher jedem, CJUMP so zu behandeln, dass es nur fuer {0,1} definiert ist. |
|
|
| Nach oben |
|
|
|