我正在做一个免费课程的练习。以下 ocaml 代码在我“制作”时编译,但一旦我尝试将其放入顶层,它就会抱怨。为什么?
let main () =
(* Parsing arguments *)
let f_name = ref "" in
Arg.parse [ ] (fun s -> f_name := s) "Mini-Java analyzer";
(* Parsing of the source file *)
let simple_java_prog =
if String.compare !f_name "" = 0 then failwith "no program file given";
Localizing.current_file_name := !f_name;
let f_desc = open_in !f_name in
let lexbuf = Lexing.from_channel f_desc in
let java_prog =
try Java_parser.program Java_lexer.token lexbuf
with
| e ->
Printf.printf "Exception during parsing: %s\n"
(Printexc.to_string e);
failwith "Stopped" in
Simple_java_translate.tr_java_prog java_prog in
Printf.printf "finished...\n"
let _ = main ()
但是当我“cc ce”(来自emacs)这段代码到顶层时,它给了我错误
....
let main () =
Error: Reference to undefined global `Localizing'
然后,有了这个错误信息,我得到了解释
http://caml.inria.fr/pub/docs/manual-ocaml/manual023.html
它说,
引用未定义的全局模块 您忽略了使用#load 将模块的实现加载到内存中。
因此,我正在尝试做:#load“localizing.cmo”。但是,现在的问题是: 没有 localizing.cmo 这是搜索结果。
bash-3.2$ ls localizing*
localizing.cmi localizing.cmx localizing.ml localizing.mli localizing.o
我想把makefile放在这里,问题的根源不应该来自“Makefile”,而且它太大了。此外,我不应该修改makefile,因为它是由课程网站提供的。
有什么问题??谢谢你。我是否可以得出这样的结论,并非所有 ocaml 程序都应该能够在顶层执行?