也许我只是失败了一件简单的事情,但是我正在使用标准工具 ocamllex ocamlyacc 开发用OCaml编写的解释器,我遇到这种情况:

  • iparser.mly包含解析器规范
  • ilexer.mll包含词法分析器规范
  • 不可能.ml包含执行代码的vm和所有需要的类型

  • 定义各种指令的指令类型在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/

    10-12 06:16