単純な言語をスキャンして解析するために、ocamllex および ocamlyacc コードを手配しようとしています。同じ抽象構文を定義しましたが、複雑なルールをスキャンするのが難しいと感じています。これが私のコードです
{
type exp = B of bool | Const of float | Iszero of exp | Diff of exp*exp |
If of exp * exp * exp
}
rule scanparse = parse
|"true"| "false" as boolean {B boolean}
|['0'-'9']+ "." ['0'-'9']* as num {Const num}
|"iszero" space+ ['a'-'z']+ {??}
|'-' space+ '(' space* ['a'-'z']+ space* ',' space* ['a'-'z']+ space* ')' {??}
しかし、一致した文字列の特定の部分にアクセスできません。式の宣言は再帰的であるため、ネストされた関数も役に立ちません(?)。助けてください。