は、誰かが私の構文を使用して言語のocamlの通訳を構築するいくつかの助けを与えることができます: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
これは何かいいですか?
定義のプロセスを表すコードの例を教えてください。私は構文解析のためのコードは必要ありません。あなたが私に喜ばせることができれば、私は方法を知らなかったので、私はIdのコンストラクタを書いていませんでした。 – Spreadzz
@Spreadzz型は 'type def = Def of string * string list * expr'のようなものか、変数と関数の定義を区別したい場合には' type def = VarDef of string * expression | FunDefの文字列*文字列リスト*式 '。 – sepp2k
あなたは私の解釈にAddとMultiplyのタイプdefを見せてもらえますか? – Spreadzz