js_of_ocaml Camlp4 类型定义中的解析错误

js_of_ocaml Camlp4 Parse error in type definition

我正在尝试构建 this program using js_of_ocaml. According to this answer,我的 makefile 中有以下行

OCAMLC      = ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -g -dtypes

但是,当我尝试构建时,出现以下错误:

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -g -dtypes   -c types.ml
> File "types.ml", line 472, characters 11-12:
> Parse error: [type_longident] expected after ")" (in [type_ident_and_parameters])
> File "types.ml", line 1:

该文件的违规行是这样的:

type ('t,'v) parser = ('t list -> 'v -> unit) -> 't list -> unit

我对 OCaml 还是很陌生,所以我不太确定发生了什么。 -syntax camlp4o 有什么作用?我可能需要更改源代码中的哪些内容才能与 js_of_ocaml 兼容?

camlp4o 提供与普通 OCaml 语法相同的语法,但有轻微的不兼容性:parsercamlp4o 中的一个特殊关键字。这就是为什么如果使用 camlp4o 语法 parser 会被拒绝。

您可以通过重命名 parser 或使用 js_of_ocaml 的 PPX 语法扩展而不是 CamlP4 来解决此问题。请检查 https://ocsigen.org/js_of_ocaml/api/Ppx_js 以了解 js_of_ocaml.

的这个较新语法助手的详细信息