Syntax 带有语法扩展的OCaml顶级

Syntax 带有语法扩展的OCaml顶级,syntax,ocaml,camlp4,Syntax,Ocaml,Camlp4,一般来说,我不知道如何做到这一点,但为了清楚起见,我会特别询问一个例子: 我觉得Sexplib很有趣。我想玩玩它。我下载了它,安装得很好(无论如何,我很确定),等等。我想在顶层使用“with sexp”语法扩展。我该怎么做呢?我找到的所有使用它的示例都假设您已经知道如何使用语法扩展来生成顶级和/或编译 我最好的办法是这样: ocamlmktop -I +site-lib/sexplib -pp "camlp4 -I +site-lib/sexplib pa_sexp_conv.cma" -o s

一般来说,我不知道如何做到这一点,但为了清楚起见,我会特别询问一个例子:

我觉得Sexplib很有趣。我想玩玩它。我下载了它,安装得很好(无论如何,我很确定),等等。我想在顶层使用“with sexp”语法扩展。我该怎么做呢?我找到的所有使用它的示例都假设您已经知道如何使用语法扩展来生成顶级和/或编译

我最好的办法是这样:

ocamlmktop -I +site-lib/sexplib -pp "camlp4 -I +site-lib/sexplib pa_sexp_conv.cma" -o sexplib-top

当我运行这个顶级时,我可以
打开Sexplib
很好,但是当我尝试将
与sexp
语法扩展一起使用时,我得到了一个语法错误。

已经是二十一世纪了-使用ocamlfind:

        Objective Caml version 3.11.2

# #use "topfind";;
- : unit = ()

# #camlp4o;;
/usr/lib/ocaml/dynlink.cma: loaded
/usr/lib/ocaml/camlp4: added to search path
/usr/lib/ocaml/camlp4/camlp4o.cma: loaded
    Camlp4 Parsing version 3.11.2

# #require "sexplib.syntax";;
/usr/lib/ocaml/unix.cma: loaded
/usr/lib/ocaml/bigarray.cma: loaded
/usr/lib/ocaml/nums.cma: loaded
/usr/lib/ocaml/num-top: added to search path
/usr/lib/ocaml/num-top/num_top.cma: loaded
/usr/lib/ocaml/sexplib: added to search path
/usr/lib/ocaml/sexplib/sexplib.cma: loaded
/usr/lib/ocaml/type-conv: added to search path
/usr/lib/ocaml/type-conv/pa_type_conv.cmo: loaded
/usr/lib/ocaml/sexplib/pa_sexp_conv.cmo: loaded

# type t = { x : int; y : float; } with sexp;;
type t = { x : int; y : float; }
val t_of_sexp__ : Sexplib.Sexp.t -> t = <fun>
val t_of_sexp : Sexplib.Sexp.t -> t = <fun>
val sexp_of_t : t -> Sexplib.Sexp.t = <fun>
目标Caml版本3.11.2
##使用“topfind”;;
-:单位=()
##camlp4o;;
/usr/lib/ocaml/dynlink.cma:已加载
/usr/lib/ocaml/camlp4:添加到搜索路径
/usr/lib/ocaml/camlp4/camlp4o.cma:已加载
Camlp4解析版本3.11.2
##需要“sexplib.syntax”;;
/usr/lib/ocaml/unix.cma:已加载
/usr/lib/ocaml/bigarray.cma:已加载
/usr/lib/ocaml/nums.cma:已加载
/usr/lib/ocaml/num top:添加到搜索路径
/usr/lib/ocaml/num-top/num_-top.cma:已加载
/usr/lib/ocaml/sexplib:添加到搜索路径
/usr/lib/ocaml/sexplib/sexplib.cma:已加载
/usr/lib/ocaml/type conv:添加到搜索路径
/usr/lib/ocaml/type conv/pa_type_conv.cmo:已加载
/usr/lib/ocaml/sexplib/pa_sexp_conv.cmo:已加载
#类型t={x:int;y:float;}和sexp;;
类型t={x:int;y:float;}
值t_of_sexp_uu:Sexplib.sexp.t->t=
值t_of_sexp:Sexplib.sexp.t->t=
val sexp_of_t:t->Sexplib.sexp.t=

好吧,把我漆成橙色,叫我苏珊。非常感谢。如果任何在线或印刷的学习资源在任何地方都提到过这一点,那将非常有用。哇,喜欢这个惯用的表达:)这是一篇关于findlib(俄语)的文章——用这个例子扩展了#camlp4o;;你怎么办?当我输入上面的部分时,我没有看到任何加载的模块列表,但也没有错误。似乎不起作用。事实上,对于较新的版本,您必须在定义
类型t=…
之前
打开sexpliblib.Std
,以便所需的
{int,float}u of_sexp,sexp{int,float}
标准函数在范围内。