Ocamlに小さなコンパイラを書いています。 ast.mli
では、私がOcamlで書かれたコンパイラの式のタイプ
let rec eval_expression env = function
| Integer_constant n -> Integer n
| Ebinop (op, n, m) -> ...
| Evar x -> ...
| Ecell (r, c) -> ...
| Bool_constant b -> ...
| Bnot c -> ...
| Bor (c1, c2) -> ...
| Band (c1, c2) -> ...
int_exprまたはbool_expr可能性のいずれかの任意の式を評価するためにeval_expression
という関数を定義したい。しかし、それは返す、式の2種類interp.ml
で
type int_expr =
| Integer_constant of int
| Evar of string
| Ebinop of binop * int_expr * int_expr
| Ecell of int_expr * int_expr (* Sheet[ , ] *)
type bool_expr =
| Bool_constant of bool
| Bcmp of cmp * int_expr * int_expr
| Band of bool_expr * bool_expr
| Bor of bool_expr * bool_expr
| Bnot of bool_expr
を定義していますコンパイル中にエラーが発生しました:
ocamlc -c interp.ml
File "interp.ml", line 63, characters 4-19:
Error: This pattern matches values of type Ast.bool_expr
but a pattern was expected which matches values of type Ast.int_expr
make: *** [interp.cmo] Error 2
どのように私のexpreの構造を変更できるか教えてくださいあなたはeval_expression
が動作するようにssionの種類を教えてください。どうもありがとうございました!
ようにevalを書く少し使い捨て通訳のためにあなたは、障害が報告され、正確なラインを表示することができます周囲の文脈の余分な数行で – dcolish
正確な失敗行(63)は '|私のポストの 'eval_expression'関数で' Bool_constant b - > ... ' – SoftTimur