フリーコースの練習をしています。次の ocaml コードは、「make」するとコンパイルされますが、トップレベルに配置しようとすると問題が発生します。なんで?
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 ()
しかし、このコードを(emacsから)トップレベルに「cc ce」すると、エラーが発生します
....
let main () =
Error: Reference to undefined global `Localizing'
次に、このエラー情報で、私は説明を得ました
http://caml.inria.fr/pub/docs/manual-ocaml/manual023.html
つまり、
未定義のグローバル mod への参照 #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 プログラムがトップレベルで実行できるとは限らないという結論を下すのは正しいでしょうか?