我知道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文件谢谢!
答案 0 :(得分:1)
它不是.cmt
文件。 .cmt
文件不仅包含AST,还包含更多信息。
此AST魔术用于允许为该语言编写替代语法的预处理器。请参见OCaml manual中的-pp
选项的说明。有关使用此功能的示例,请参见Camlp4。
请注意,调用-pp
生成的文件将只是一个临时文件(除非有错误)。
要回答标题中的问题,ocamlc
编译器可以读取的文件扩展名是.ml
,.mli
,.cmo
(已编译模块),{{1} }(已编译的界面)和.cmi
(已编译的库)。