我一直在为一种小语言开发一个解析器,其语法如下
P::= 1 | 0 | P+P | P and P | P wait(d) P
Run Code Online (Sandbox Code Playgroud)
这是我用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 = …Run Code Online (Sandbox Code Playgroud)