На самом деле не могу понять, почему моя программа не работает

Я действительно потратил много времени, работая над этой проблемой и пытаясь найти решение, но не могу понять, в чем дело.

Я учусь кодировать 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 линия.

Насколько я вижу, lightPROC будет ждать некоторого ввода на его light.changechannel и затем назначит его light.onvariable, Затем программа перейдет к условному утверждению IF, где light.on = 1 линия должна в этом случае оценить true, Но вместо этого я получаю эту ошибку.

Я пытался использовать -verboseфлаг, но компилятор говорит, что вы не можете использовать его для файлов.occ.

Кто-нибудь знает, как или если я могу получить более подробную информацию от компилятора?

Любая помощь по этому вопросу будет принята с благодарностью.

Спасибо

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 

На другой ноте вы можете изменить свою структуру. Попробуйте три ПРОЦЕССА

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?)
Другие вопросы по тегам