構文を使用して言語用の ocaml インタープリターを構築するのを手伝ってくれる人がいますか:
Prog ::= Def* Expr
Def ::= id id* = Expr
Expr ::= int | id | Expr '+' Expr | Expr '*' Expr | id Expr* | if Expr then Expr else Expr
これまでのところ、私はこれをしました:
type expr = I of int
| Id of string
| Add of expr * expr
| Multiply of expr * expr
| If of expr * expr * expr
let rec evaluate = function
| I n -> n
| Add(e1,e2) -> evaluate e1 + evaluate e2
| Multiply(e1,e2) -> evaluate e1 * evaluate e2
| If(a,b,c) -> if evaluate a<>0 then evaluate b else evaluate c
これでいいですか?