2011-01-11 23 views
0

私はこの問題を解決するために多くの時間を費やしていましたが、何か問題があるとは思われません。本当に私のプログラムが動作しない理由を理解できません

私はオッカムをコーディングし、次のプログラムを持っている方法を学習しました:

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 
: 

私がやろうとしているすべては、私は「o」キーを押したときに別のプロセスからの通信です。

私は(KR O C)コンパイラから取得していますエラーメッセージは次のとおりです。light.on = 1ラインである

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

私の知る限り見ることができるように、lightPROCはそのlight.changechannelにいくつかの入力を待つことになると、そのlight.onvariableに割り当てます。プログラムは、IFの条件文に進みます。この場合、light.on = 1行はこの場合、trueと評価されます。しかし、代わりにこのエラーが発生します。

私は-verboseフラグを使用しようとしましたが、.occファイルには使用できないと言われています。

コンパイラから詳しい情報を入手する方法がわかっているのですか?

これに関するお手伝いをさせていただきます。

おかげ

答えて

1

上記のコードは、私のためにコンパイルし、実行が到達したときに、私はまた、それが別のノートで

occbuild -v --program light.occ 

以下のように冗長モードで実行するように取得することができます

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) 

デッドロックあなたの構造を変更したいかもしれません。 3つの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

お返事ありがとうございます。それは有り難いです。私は明日までそれを試してみる必要があります。 – Joe

関連する問題