tal vez sólo estoy fallando en algo muy simple, pero estoy desarrollando un intepreter escrito en OCaml con herramientas estándar como ocamllex y ocamlyacc y tengo esta situación:invocación OCaml compilador que acaba de producir .cmi
- contiene iparser.mly especificación analizador
- ilexer.mll contiene especificaciones lexer
- impossible.ml contiene la máquina virtual que se ejecuta el código y todos los tipos necesitaba
El tipo de instrucción que define varias instrucciones está en impossible.ml
y el analizador lo necesita, pero impossible.ml
usa el analizador definido en iparser.mly
por lo que ambos se necesitan mutuamente para compilarse correctamente.
¿Hay alguna manera de producir solo el archivo .cmi
para mi impossible.ml
? De esta forma, el analizador sabrá sobre los tipos definidos en impossible.ml
y me permitirá compilar impossible.cmo/.cmi
y compilar más tarde también impossible.cmo
. Entonces puedo vincularlos a todos.
Hasta ahora mi script de compilación es:
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
pero esto no funciona porque ocamlc -c iparser.ml
necesidades al menos impossible.cmi
para conocer los tipos.
¿Alguna sugerencia? Gracias de antemano ..
¿No puedo simplemente construir el .cmi inferido normal? De lo que entendí al usar solo un archivo .ml generará un archivo .mli estándar que publica todo el módulo ... ¿estoy en lo cierto? – Jack
Sí, tienes razón. Simplemente no estoy seguro de si hay una forma de generar solo mli/cmi sin también compilar el archivo cmo. Lo más cercano que puedo encontrar en este momento es ocamlc -i impossible.ml que imprimirá el mli predeterminado a stdout. Podría agregar algo al proceso de compilación para hacerlo, redirigir el resultado a un archivo y luego compilarlo. –
Traté de resolverlo, pero por supuesto, llamar 'ocamlc -i impossible.ml' regresa en __Error: valor sin consolidar Iparser.first__ por el mismo problema expuesto en mi pregunta. En este momento, no creo que haya forma de escribir mi propio archivo .mli – Jack