也许我只是失败了一件简单的事情,但是我正在使用标准工具 ocamllex 和 ocamlyacc 开发用OCaml编写的解释器,我遇到这种情况:
定义各种指令的指令类型在
impossible.ml
中,解析器需要它,但是impossible.ml
使用iparser.mly
中定义的解析器,因此它们彼此都需要彼此正确地编译。有没有一种方法可以只为我的
.cmi
生成impossible.ml
文件?通过这种方式,解析器将知道impossible.ml
中定义的类型,这将允许我编译impossible.cmo/.cmi
,然后再编译impossible.cmo
。然后,我可以将所有这些链接在一起。到目前为止,我的编译脚本是:
ocamlyacc iparser.mly
ocamlc -c iparser.mli
ocamllex ilexer.mll
ocamlc -c ilexer.ml
ocamlc -c iparser.ml
ocamlc -c impossible.ml
ocamlc -o imp.exe ilexer.cmo iparser.cmo impossible.cmo
但这不起作用,因为
ocamlc -c iparser.ml
至少需要impossible.cmi
才能知道类型。有什么建议?提前致谢..
最佳答案
您需要创建一个不可能的.mli并进行编译。那会产生不可能的.cmi,只会产生.cmi。
或者:
ocamlc -i impossible.ml
将把mli打印到标准输出。您可以执行以下操作:
ocamlc -i impossible.ml > impossible.mli
ocamlc -c impossible.mli
关于header - 调用OCaml编译器以生成.cmi,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3150638/