Парсер OCaml и структура грамматики

Я разрабатывал парсер для крошечного языка, синтаксис которого следующий

P::= 1 | 0 | P+P | P and P | P wait(d) P 

Вот код, который я написал в Ocaml camlp4

action:
  [
     ["act"; a = LIDENT  -> Act(a)]
    |
     ["coact"; a = LIDENT  -> Act2(a)]  
  ];

  proc: 
  [ 
     [ "ZERO" -> Zero]
    | RIGHTA
     ["."; l = action; p = SELF -> Now(l,p)]
    | RIGHTA
     [":"; l = action;  p = SELF -> Delay(l,p)]
    | LEFTA
     [p1 = SELF; "+"; p2 = SELF -> Plus(p1,p2)]
    |RIGHTA
     [p1 = SELF; "WAIT"; "("; d = INT; ")"; p2 = SELF -> Wait(p1,d,p2)]
    | 
     [ x = UIDENT -> Proc(x)]   
  ];

Но, к сожалению, парсер не разбирает такие строки, как

.act abort WAIT(4) :act close

потому что правило для конструкции WAIT ожидает в качестве первого аргумента proc.

Как я могу это исправить?

0 ответов

Другие вопросы по тегам