0

私は本当にこの問題に多くの時間を費やし、解決策を見つけるためにグーグルで検索しましたが、何が問題なのかを見つけることができないようです.

私はoccamをコーディングする方法を学び、次のプログラムを持っています:

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) コンパイラから得られるエラー メッセージは次のとおりです。

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

これがlight.on = 1線です。

私が見る限り、 は何らかの入力を待ってから、それを に割り当てます。次に、プログラムは条件ステートメントに進みます。この場合、行は に評価されます。しかし、代わりにこのエラーが発生します。light PROClight.change channellight.on variableIFlight.on = 1true

フラグを使用してみまし-verboseたが、コンパイラは .occ ファイルには使用できないと言っています。

コンパイラからより詳細な情報を取得する方法、または取得できるかどうかを知っている人はいますか?

これに関する任意の助けをいただければ幸いです。

ありがとう

4

1 に答える 1

1

上記のコードは私のためにコンパイルされ、実行がデッドロックに達すると

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)

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

occbuild -v --program light.occ 

別の注意点として、構造を変更したい場合があります。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?)
于 2011-01-11T14:46:45.827 に答える