我在我的 camlp4 解析器中使用deriving-ocsigen语法扩展时遇到问题。我的解析器被称为pa_debug.ml
这是标签文件:
<pa_debug.ml>: pp(camlp4orf.opt), package(deriving-ocsigen.syntax), syntax(camlp4o)
编译时使用
ocamlbuild -libs dynlink,camlp4lib,deriving -cflags -I,+camlp4,-dtypes -lflags -I,+camlp4,-dtypes -use-ocamlfind pa_debug.cmo
我收到以下错误:
Warning: -pp overrides the effect of -syntax partly
File "pa_debug.ml", line 103, characters 66-67:
While expanding quotation "expr" in a position of "expr":
Parse error: [expr] expected after [infix operator (level 0) (comparison operators, and some others)] (in [expr])
错误发生在这段代码的第二行:
...
let fun_id = get_fun_id bi in
let app = <:expr< Debug.ho_1 $str:fun_id$ (Show.show<int>) (Show.show<int>) >> in
let debug_fun_body = mk_appln _loc app new_patts in
...
在代码中,我正在键入以在引用中使用派生语法。但似乎预处理器不理解引用中“<”和“>”比较运算符的存在。如果我Show.show<int>
在另一个文件中使用不带引号的语法,它编译时不会出错。
我已经看到了解决问题的解决方案,-pp overrides the effect of -syntax
但我不明白。有人可以向我解释一下或提出其他解决方法吗?