może jestem po prostu braku w bardzo prostych rzeczy, ale jestem opracowanie intepreter napisany w SML ze standardowych narzędzi jak ocamllex i ocamlyacc i mam taką sytuację:Invoke OCaml kompilator po prostu produkować .cmi
- iparser.mly zawiera parser Spec
- ilexer.mll zawiera lexer specyfikację
- impossible.ml zawiera maszynę wirtualną, która wykonuje kod i wszystkie typy potrzebne
Typ instrukcji, który definiuje różne instrukcje, to impossible.ml
i jest wymagany przez analizator składni, ale impossible.ml
używa parsera zdefiniowanego w iparser.mly
, więc oba wymagają wzajemnej kompilacji.
Czy istnieje sposób, aby wyprodukować tylko plik .cmi
dla mojego impossible.ml
? W ten sposób parser będzie wiedział o typach zdefiniowanych w impossible.ml
i pozwoli mi skompilować impossible.cmo/.cmi
, a później skompilować także impossible.cmo
. Potem mogę połączyć wszystkie razem.
tej pory mój skrypt kompilacji jest:
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
ale to nie działa, ponieważ ocamlc -c iparser.ml
potrzebuje przynajmniej impossible.cmi
znać typy.
Wszelkie sugestie? Z góry dzięki ..
Nie mogę po prostu zbudować normalnego wywnioskowanego .cmi? Z tego co zrozumiałem za pomocą tylko pliku .ml wygeneruje standardowy plik .mli, który publikuje wszystko modułu .. mam rację? – Jack
Tak, masz rację. Po prostu nie jestem pewien, czy istnieje sposób na wyjście tylko mli/cmi bez kompilowania pliku cmo. Najbliżej mogę znaleźć w tej chwili jest ocamlc -i impossible.ml, który wypisze domyślne mli na standardowe wyjście. Możesz dodać coś do procesu kompilacji, aby to zrobić, przekierować wyjście do pliku, a następnie skompilować. –
Próbowałem to rozgryźć, ale wzywanie 'ocamlc -i impossible.ml' zwraca w __Error: wartość niezwiązana Iparser.first__ z powodu tego samego problemu, który został ujawniony w moim pytaniu. W tym momencie myślę, że nie ma sposobu na napisanie własnego pliku .mli. – Jack