vielleicht bin ich nur in einer wirklich einfachen Sache versagt, aber ich bin ein Interpreter geschrieben in OCaml mit Standardwerkzeugen wie ocamllex und ocamlyacc entwickeln, und ich habe diese Situation:Invoke OCaml Compiler nur zu produzieren .cmi
- iparser.mly enthält parser spec
- ilexer.mll LEXER spec enthält
- impossible.ml die vm enthält, der den Code ausführt, und alle Typen benötigt
Der Befehlstyp, der verschiedene Anweisungen definiert, befindet sich in impossible.ml
und wird vom Parser benötigt, aber impossible.ml
verwendet den Parser, der in iparser.mly
definiert ist, sodass beide sich gegenseitig korrekt kompilieren müssen.
Gibt es eine Möglichkeit, nur die .cmi
Datei für meine impossible.ml
zu produzieren? Auf diese Weise würde der Parser über die in impossible.ml
definierten Typen Bescheid wissen und es mir erlauben, impossible.cmo/.cmi
zu kompilieren und später auch impossible.cmo
zu kompilieren. Dann kann ich alle zusammen verbinden.
Bisher mein Compilierung Skript ist:
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
aber das funktioniert nicht, weil ocamlc -c iparser.ml
benötigt mindestens impossible.cmi
die Typen kennen.
Irgendwelche Vorschläge? Vielen Dank im Voraus ..
Kann ich nicht einfach die normale abgeleitete .cmi erstellen? Von dem, was ich mit nur einer .ml-Datei verstanden habe, wird eine Standard-.mli-Datei erzeugt, die alles vom Modul veröffentlicht. Habe ich recht? – Jack
Ja, Sie haben Recht. Ich bin nur nicht sicher, ob es eine Möglichkeit gibt, nur die mli/cmi auszugeben, ohne auch die cmo-Datei zu kompilieren. Die nächste, die ich im Moment finden kann, ist ocamlc -i unmögliche.ml, die den Standard-mli auf stdout druckt. Sie könnten etwas zum Build-Prozess hinzufügen, um dies zu tun, die Ausgabe in eine Datei umleiten und diese dann kompilieren. –
Ich versuchte es herauszufinden, aber natürlich ruft 'ocamlc -i imploit.ml' zurück in __Error: Unbound Wert Iparser.first__ wegen des gleichen Problems in meiner Frage ausgesetzt. An diesem Punkt glaube ich nicht, dass es um meine eigene .mli Datei – Jack