在我的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问题的solution,但我不理解它。有没有人能给我解释一下,或者提出一些其他的解决方法?
发布于 2013-05-16 05:44:45
现在您已经发布了您的代码片段,我相信问题出在您在引号中使用Camlp4扩展。我需要检查这是否在一般情况下是允许的(有一个问题是引号解析器是否使用预定义的解析器,或者是否还使用先前传递给编译器的扩展进行了扩展),还需要检查您正在使用的特定扩展是否可以与修改后的语法一起工作,修改后的语法是通过调用camlp4orf使用的(or意味着环境代码使用原始语法,而引号中的代码使用修改后的语法,这有时在引号中是首选的,因为它不那么模糊- f表示“完整”,即通常的扩展(流解析器等)。)被激活)。
https://stackoverflow.com/questions/16538275
复制相似问题