Arbeitsbereich Programmiersprachen Foren-Übersicht
Autor Nachricht

<  Archiv WS 2010/2011  ~  cjump in kanga

lamborgotti
Verfasst am: 31 Jan 2011 20:20 Antworten mit Zitat
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?
Benutzer-Profile anzeigen Private Nachricht senden
konrada
Verfasst am: 01 Feb 2011 10:44 Antworten mit Zitat
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.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
lamborgotti
Verfasst am: 01 Feb 2011 14:16 Antworten mit Zitat
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
Benutzer-Profile anzeigen Private Nachricht senden
konrada
Verfasst am: 01 Feb 2011 15:15 Antworten mit Zitat
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


?
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
lamborgotti
Verfasst am: 01 Feb 2011 16:13 Antworten mit Zitat
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
Benutzer-Profile anzeigen Private Nachricht senden
konrada
Verfasst am: 01 Feb 2011 16:28 Antworten mit Zitat
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.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
konrada
Verfasst am: 01 Feb 2011 18:30 Antworten mit Zitat
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.
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen

Beiträge vom vorherigen Thema anzeigen:  

Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.

Gehe zu:  

Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.