我在Ocaml中編寫了一個小型編譯器。在ast.mli
,我已經定義2種表達式用Ocaml編寫的編譯器中的表達式類型
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
在interp.ml
,我要定義一個稱爲eval_expression
以評估其可以或者是int_expr或bool_expr
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) -> ...
任何表達式函數但是它返回一個錯誤,同時編譯:
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
有誰能告訴我,我可以如何改變我的表達結構ssion類型,以便eval_expression
有效?非常感謝你!
你能準確顯示線路故障報告在額外的周圍環境和幾行? – dcolish
確切的故障線路(63)是'| Bool_constant b - > ...'在我的文章中的'eval_expression'函數中。 – SoftTimur