使用OCamlyacc的外部类型声明

roc*_*hem 9 ocaml parser-generator ocamlyacc

我在expr.ml文件中有一个类型expr.在parser.mly(OCamlyacc文件)中,我定义了expr规则并给出了类型:

    %start expr
    %type <expr> expr
Run Code Online (Sandbox Code Playgroud)

但是,我得到:

    File "parser.mli", line 34, characters 48-52:
    Error: Unbound type constructor expr
Run Code Online (Sandbox Code Playgroud)

我尝试添加

    %{
      open Expr
    %}
Run Code Online (Sandbox Code Playgroud)

在.mly文件的开头,但它仍然无法正常工作.如何在外部文件中定义此expr类型并将其用作规则的返回值?谢谢.

nim*_*odm 10

您需要expr使用模块名称限定类型.即,如果在expression.ml(使用type expr = ...)中定义,则应使用

%type <Expresssion.expr> main
Run Code Online (Sandbox Code Playgroud)

E使用模块名称时请注意资金.