2014-04-24 257 views
0

下面是代码:OCaml的编译错误与ocamlfind

class parser = 

let test1 = function 
| 1 -> print_int 1 
| 2 -> print_int 2 
| _ -> print_int 3 in 

let test = function 
| 1 -> print_int 1 
| 2 -> print_int 2 
| _ -> print_int 3 in 

object(self) 

end 

这里是_tags

true: syntax(camlp4o) 
true: package(deriving,deriving.syntax) 
true: thread,debug,annot 
true: bin_annot 

这里是编译命令:

ocamlbuild -use-ocamlfind test.native 

这里是编译错误:

Warning: tag "package" does not expect a parameter, but is used with parameter "deriving,deriving.syntax" 
Warning: tag "syntax" does not expect a parameter, but is used with parameter "camlp4o" 
+ /usr/local/bin/ocamldep.opt -modules test.ml > test.ml.depends 
File "test.ml", line 8, characters 0-3: 
Error: Syntax error 
Command exited with code 2. 
Compilation unsuccessful after building 1 target (0 cached) in 00:00:00. 

然而,当我使用这个:

ocamlbuild test.native 

然后代码可以编译成功...

回答

1

这是因为ocamlbuild -use-ocamlfind test.native指示编译器使用camlp4解析器。它与标准OCaml解析器有点不同。实际上,parser是camlp4中的一个关键字,因此您不能将其用作类名称。只需重命名它。

+0

是的,我没有想到过这样的错误,谢谢! – computereasy