Может ocamlc может компилировать файлы, отличные от ml и mli? - PullRequest
0 голосов
/ 09 ноября 2018

Я знаю, что ocamlc может компилировать исходный файл ocaml .ml и .mli

Я читаю исходный код компилятора 4.07, в файле driver / pparse.ml, функция 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, все они получают false. Это означает, что astfile означает файл .cmt?

Я думаю, что astfile здесь - это файл .cmt. Я могу использовать опцию ocamlc -bin-annot для получения файла .cmt. Это файл .cmt? Но я не могу использовать ocamlc для компиляции файла .cmt .THANKS!

1 Ответ

0 голосов
/ 09 ноября 2018

Это не файл .cmt. Файл .cmt содержит больше информации, чем просто AST.

Эта магия AST используется для препроцессоров, которые позволяют писать альтернативные синтаксисы для языка. См. Описание опции -pp в руководстве OCaml . См. Camlp4 для примера использования этой функции.

Обратите внимание, что файл, созданный при вызове -pp, будет только временным (если не будет ошибки).

Чтобы ответить на вопрос в вашем заголовке, расширения файлов, которые может прочитать компилятор ocamlc, .ml, .mli, .cmo (скомпилированный модуль), .cmi (скомпилированный интерфейс) и .cma ( скомпилированная библиотека).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...