为SWIG安装Ocaml / grammar模块

时间:2010-10-26 14:16:02

标签: ocaml swig

运行ocaml的Swig示例给出了此错误消息。

rm -rf swig.mli swig.ml swigp4.ml && ../../../preinst-swig -ocaml -co swig.mli 2>/dev/null && ../../../preinst-swig -ocaml -co swig.ml 2>/dev/null && ../../../preinst-swig -ocaml -co swigp4.ml 2>/dev/null && ocamlc -c swig.mli && ocamlc -c swig.ml && ocamlc -I ` camlp4 -where` -pp "camlp4o pa_extend.cmo q_MLast.cmo" -c swigp4.ml
File "swig.ml", line 159, characters 54-57:
Warning 20: this argument will not be used by the function.
File "swigp4.ml", line 26, characters 2-6:
Parse error: Deprecated syntax, the grammar module is expected
File "swigp4.ml", line 1, characters 0-1:
Error: Preprocessor error

文件“swigp4.ml”,第26行,字符2-6具有以下内容。

EXTEND
Line 25:  expr:
Line 26:  [ [ e1 = expr ; "'" ; "[" ; e2 = expr ; "]" ->
Line 27:    >
     ...
Line 114:    | f = expr ; "'" ; "(" ; args = LIST0 (expr LEVEL "simple") SEP "," ; ")" -> 
Line 115:   >
Line 116:    ] ] ;
Line 117: END ;;

可能有什么问题?如何使用ocaml安装语法模块?

ADDED

我使用的是Mac OS X 10.6.4,我从this site.

安装了Ocaml

我用'camlp4 -where'获得了以下结果。

simple> camlp4 -where
/usr/local/lib/ocaml/camlp4

swigp4.ml可下载here

2 个答案:

答案 0 :(得分:1)

我从未使用过这个swig包,但是使用了camlp4语法模块。你可能有camlp4,所以我猜这个问题是使用的语法。您可以检查camlp4和语法模块,找到camlp4目录,camlp4 -where并查看该目录是否有,/Camlp4Parsers/Camlp4GrammarParser.[cmi|cmo|cmx|o]

如果是语法,我为camlp4语法提取了一些代码,并且表达式的结构略有不同(我不确定该格式是否无效,但至少不是我之前的结构方式) )

[[ | expr1 | expr2 ]]

应该是

[ [ expr1] | [expr2] ]

答案 1 :(得分:0)

我相信你没有使用最新版本的Swig。使用Swig 1.3,我遇到了同样的问题。尝试移动到swig 2.0.X,你就没有问题了。

我一直在研究Xapian的ocaml绑定,不幸的是,Swig中的ocaml支持已经有点不受维护了。但是,我发现Swig源代码树中的示例非常有用。我已经整理了一个很好的make配方来编译swig依赖项。您可能会注意到这与swig示例并没有什么不同,我只是无耻地利用这段时间来分享它:

SWIG=../../swig/preinst-swig
swig:
    $(SWIG) -ocaml -co swigp4.ml
    $(SWIG) -ocaml -co swig.mli 
    $(SWIG) -ocaml -co swig.ml
    ocamlfind ocamlc -package camlp4 \
    -pp "camlp4o pa_extend.cmo q_MLast.cmo" \
    -c swigp4.ml
    ocamlc -c swig.mli swig.ml

然后,在编译使用语法扩展的任何代码时,可以通过包含-pp "camlp4o ./swig4.cmo"来构建它。您还需要在链接时添加swig.cmo。我有一个gist我完整的Makefile,你也可能觉得它很有用。