ocamlc可以编译除ml和mli之外的文件吗?

时间:2018-11-09 06:39:16

标签: ocaml

我知道ocamlc可以编译ocaml源文件.ml和.mli

我正在阅读驱动程序/pparse.ml中的编译器源代码4.07,函数file_aux将使用ocamlyacc来获取ast Parsetree。

第169行:

File: d:\src\ocaml-4.07.0\driver\pparse.ml
169:   let (ic, is_ast_file) = open_and_check_magic inputfile ast_magic in

将检查文件是否为ast文件。我想知道哪个文件为astfile?

我可以编写以下代码进行欺骗:

Printf.printf "%b" is_ast_file

但是当我同时使用.ml和.mli文件时,所有文件都为假。astfile是.cmt文件吗?

我认为这里的astfile是.cmt文件。我可以使用ocamlc选项-bin-annot获得.cmt文件。是.cmt文件吗,但是我不能使用ocamlc来编译.cmt文件谢谢!

1 个答案:

答案 0 :(得分:1)

它不是.cmt文件。 .cmt文件不仅包含AST,还包含更多信息。

此AST魔术用于允许为该语言编写替代语法的预处理器。请参见OCaml manual中的-pp选项的说明。有关使用此功能的示例,请参见Camlp4

请注意,调用-pp生成的文件将只是一个临时文件(除非有错误)。

要回答标题中的问题,ocamlc编译器可以读取的文件扩展名是.ml.mli.cmo(已编译模块),{{1} }(已编译的界面)和.cmi(已编译的库)。

相关问题