Вызовите компилятор OCaml, чтобы просто произвести .cmi

возможно, я просто перестал работать в действительно простой вещи, но я разрабатываю intepreter, записанный в OCaml со стандартными инструментами как ocamllex и ocamlyacc, и у меня есть эта ситуация:

  • iparser.mly содержит спецификацию синтаксического анализатора
  • ilexer.mll содержит спецификацию лексического анализатора
  • impossible.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 знать типы.

Какие-либо предложения?Заранее спасибо..

7
задан Jack 30 June 2010 в 15:16
поделиться

2 ответа

Вам нужно создать невозможный.mli и скомпилировать его. Это создаст невозможный .cmi и только .cmi.

В качестве альтернативы:

ocamlc -i impossible.ml

напечатает mli в stdout. Вы можете сделать что-то вроде этого:

ocamlc -i impossible.ml > impossible.mli
ocamlc -c impossible.mli
5
ответ дан 7 December 2019 в 07:40
поделиться

IMHO, вы не можете законно компилировать рекурсивно-зависимые модули таким образом. Либо исключите взаимозависимости в третьем модуле (обычно это просто), либо передайте их как параметры (или изменяемые ссылки инициализации - некрасиво), либо используйте рекурсивные модули.

2
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: