我正在使用Ocaml编写一个小编译器。我想先检查Ast,然后输入Sast。
但我总是得到如下错误:
File "typecheck_debug.ml", line 93, characters 28-35:
Error: This expression has type Sast.var_decl
but an expression was expected of type Ast.var_decl代码是:
let rec trans_lval env = function
Ast.Id(n) -> let vdecl = (find_variable env.scope n) in
Sast.Id(vdecl), vdecl.vvtype
ocamllex scanner.mll
ocamlyacc parser.mly
ocamlc -c ast.mli
ocamlc -c parser.mli
ocamlc -c scanner.ml
ocamlc -c parser.ml
ocamlc -c sast.mli
ocamlc -c typecheck_debug.ml我不明白为什么。我的项目流程有什么问题吗?
发布于 2012-12-18 05:07:48
从这一小段代码中很难看出,但听起来Sast.Id需要一个Sast.var_decl类型的值作为参数,但find_variable会产生一个Ast.var_decl类型的值,所以这就是vdecl的类型。
我在这里假设第93行,字符28-35是(vdecl)。如果不是,请澄清。
发布于 2013-02-13 21:05:27
另一种可能性是问题不在那里,而是在函数trans_lval的另一个臂中(您没有显示它,但肯定还有其他的,您的ast不能只由Ids组成)。检查代码的哪一部分是罪魁祸首的简单方法包括:
让rec函数: Ast.lval -> Sast.lval = trans_lval (*代码跟在后面*)
(这可能是错误的,在错误消失之前,我显然不能从gave).
https://stackoverflow.com/questions/13921998
复制相似问题