2011-01-11 15 views
0

Ich habe wirklich eine Menge Zeit mit diesem Problem arbeiten und googeln um eine Lösung zu finden, aber ich kann nicht finden, was falsch ist.Wirklich kann nicht verstehen, warum mein Programm nicht funktioniert

Ich habe zu lernen, wie occam codieren und haben das folgende Programm:

PROC light (CHAN OF BYTE screen, CHAN OF INT light.change) 
    INT light.on : 
    WHILE TRUE 
    SEQ 
     light.change ? light.on 
     IF 
     light.on = 1 
      screen ! 'y' 
     TRUE 
      SKIP 
: 

PROC test(CHAN OF BYTE keyboard, scr) 
    CHAN OF INT to.light : 
    INITIAL INT on IS 1(INT) : 
    BYTE b : 
    SEQ 
    light(scr, to.light) 
    WHILE TRUE 
     SEQ 
     keyboard ? b 
     IF 
      b = 'o' 
      to.light ! on 
      TRUE 
      SKIP 
: 

Alles, was ich bin versucht, von einem Prozess zu einem anderen zu tun ist, zu kommunizieren, wenn ich die ‚o‘ Taste drücken.

Die Fehlermeldung erhalte ich von den (KR o C) Compiler ist:

Error at lift.occ:11 
Program failed, state = e, eflags = 00000000 

die die light.on = 1 Linie ist.

Soweit ich sehen kann, ist die lightPROC wird für eine Eingabe warten auf seine light.changechannel und wird es dann light.onvariable seiner zuweisen. Das Programm fährt dann mit einer bedingten Anweisung IF fort, wobei die light.on = 1 Zeile in diesem Fall zu true auswerten sollte. Aber stattdessen bekomme ich diesen Fehler.

Ich habe versucht, mit dem -verbose Flag, aber der Compiler sagt, dass Sie es nicht für .occ-Dateien verwenden können.

Weiß jemand wie oder wenn ich genauere Informationen vom Compiler bekommen kann?

Jede Hilfe zu diesem würde sehr geschätzt werden.

Dank

Antwort

1

Der obige Code für mich erstellt und bei der Ausführung Deadlock

james:conc$ occbuild --program light.occ 
james:conc$ light 
KRoC: deadlock: no valid processes found in workspace(s) 

KRoC: program deadlocked (no processes to run) 

erreicht ich es auch im ausführlichen Modus, wie unten

occbuild -v --program light.occ 

Auf einem anderen Ton zu laufen bekommen Vielleicht möchten Sie Ihre Struktur ändern. Versuchen Sie, drei PROC

PROC is.light.on(CHAN BYTE screen! , CHAN INT light.control) 
    WHILE TRUE 
...output to terminal if light is on or off 

PROC light.switch(CHAN BYTE keyboard? , CHAN INT light.control) 
    WHILE TRUE 
...use the keyboard to turn light on and off 

PROC light(CHAN BYTE keyboard? , screen!) 
    CHAN INT light.control:--0 for light on;1 for light off 
    PAR 
    light.switch(keyboard? , light.control!) 
    is.light.on(screen! , light.control?) 
+0

Vielen Dank für Sie zu beantworten. Ich schätze es. Ich werde bis morgen warten müssen, um es auszuprobieren. – Joe

Verwandte Themen