我是OCaml的新手,但其文檔使我哭了。 我想在ocaml上編寫一個解析器並將其集成到C++項目中。如何構建使用Genlex的OCaml源碼
我做了C++ - OCaml的綁定權就像是這裏描述 http://www.mega-nerd.com/erikd/Blog/CodeHacking/Ocaml/calling_ocaml.html
,所以我可以在調用OCaml的代碼這樣的命令的可執行文件:
- 貓build.sh
- #/斌/慶典
- 的mkdir -p建立
- ocamlopt -c -o建立/ ocaml的所謂從 - c.cmx ocaml-called-from-c.ml
- ocamlopt -output-obj -o build/camlcode.o build/ocaml-called-from-c.cmx
- gcc -g -Wall -Wtratra -c c-main-calls-ocaml.c -o build /c-main-calls-ocaml.o
- gcc build/camlcode.o build/c-main-calls-ocaml.o -lm -L〜/ .opam/4.01.0/lib/ocaml -lasmrun -o c-main-calls-ocaml -ldl
但是後來我添加了「打開Genlex ;;」到ocaml-called-from-c.ml並嘗試寫例如簡單的解析器,因爲它說明如下:
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Genlex.html
因爲它說: 「每個人都應該注意的是,使用解析器關鍵字和只有通過camlp4擴展才能獲得流的相關表示法,這意味着必須使用編譯器的「-pp」命令行開關預處理其源。
但
ocamlopt -pp camlp4 -o編譯/ ocaml的所謂從 - c.cmx -c ocaml-called-from-c.ml
得到
解析錯誤:入門[implem]是空 錯誤,同時運行外部預處理器 命令行:camlp4 'ocaml-called-from-c.ml'>的/ tmp/ocamlpp162c63
而不-pp它落在:
解析器 | [< n1 = parse_atom; N2 = parse_remainder 1>] - > N2
與
文件 「ocaml-called-from-c.ml」,行99字符13-14: 錯誤:語法錯誤
您可以嘗試用'-syntax camlp4o'替換'-pp camlp4o'。 AFAIR pp用於指定camlp4的語法擴展。如果你使用ocamlfind來調用OCaml,它也會很好。如果你將鏈接粘貼到github上,我們可以很容易地解決你的問題。 – Kakadu
看看[Menhir](http://gallium.inria.fr/~fpottier/menhir/),它有很好的文檔記錄! –