Ich habe einen Lexer und Parser, den ich mit ocamllex und menhir gebaut habe, und sie funktionieren, wenn ich sie auf höchster Ebene verwende, aber die Module, die sie bilden, sind immer noch undefiniert.Warum ist mein Ocaml-Modul undefiniert?
~: ocamlbuild -clean
~: ocamlbuild PhoebeParser.cma PhoebeLexer.cma
ocamlopt.opt unix.cmxa -I /Users/Tim/.opam/system/lib/ocamlbuild /Users/Tim/.opam/system/lib/ocamlbuild/ocamlbuildlib.cmxa myocamlbuild.ml /Users/Tim/.opam/system/lib/ocamlbuild/ocamlbuild.cmx -o myocamlbuild
menhir --infer --raw-depend --ocamldep 'ocamldep.opt -modules' PhoebeParser.mly > PhoebeParser.mly.depends
ocamldep.opt -modules PhoebeAST.ml > PhoebeAST.ml.depends
ocamlc.opt -c -o PhoebeAST.cmo PhoebeAST.ml
menhir --ocamlc ocamlc.opt --infer PhoebeParser.mly
ocamldep.opt -modules PhoebeParser.mli > PhoebeParser.mli.depends
ocamlc.opt -c -o PhoebeParser.cmi PhoebeParser.mli
ocamldep.opt -modules PhoebeParser.ml > PhoebeParser.ml.depends
ocamlc.opt -c -o PhoebeParser.cmo PhoebeParser.ml
ocamlc.opt -a PhoebeAST.cmo PhoebeParser.cmo -o PhoebeParser.cma
ocamldep.opt -modules PhoebeLexer.mli > PhoebeLexer.mli.depends
ocamlc.opt -c -o PhoebeLexer.cmi PhoebeLexer.mli
ocamllex.opt -q PhoebeLexer.mll
ocamldep.opt -modules PhoebeLexer.ml > PhoebeLexer.ml.depends
ocamlc.opt -c -o PhoebeLexer.cmo PhoebeLexer.ml
ocamlc.opt -a PhoebeAST.cmo PhoebeParser.cmo PhoebeLexer.cmo -o PhoebeLexer.cma
~: cd _build/
~/_build: ocaml
OCaml version 4.04.0
# PhoebeParser.phoebe_spec;;
Characters -1--1:
PhoebeParser.phoebe_spec;;
Error: Reference to undefined global `PhoebeParser'
# PhoebeLexer.phoebe_lexer;;
Characters -1--1:
PhoebeLexer.phoebe_lexer;;
Error: Reference to undefined global `PhoebeLexer'
#
Was mache ich falsch?
meinst du nicht '#load" PhoebeLexer.cma ";;' (und 'Parser' natürlich) am Ende deiner Antwort? – Virgile
Verdammt, es passiert))) Danke, @Virgile! – ivg
Solange ich die Interaktion auf höchster Ebene mache, wird #load ausreichen.Aber ich verstehe immer noch nicht, warum PhoebeParser und PhoebeLexer nicht definiert sind. Was ist der Unterschied zwischen einem Modul, das ich laden kann und einem Modul, das ich öffnen kann? –