将外部类型声明与OCamlyacc一起使用
|
我在expr.ml文件中有一个类型expr。在parser.mly(OCamlyacc文件)中,我定义了expr规则并指定类型:
%start expr
%type <expr> expr
但是,我得到:
File \"parser.mli\", line 34, characters 48-52:
Error: Unbound type constructor expr
我尝试添加
%{
open Expr
%}
在.mly文件的开头,但仍然无法正常工作。如何在外部文件中定义此expr类型并将其用作规则的返回值?谢谢。
没有找到相关结果
已邀请:
3 个回复
恋裂
中定义(使用
),则应使用
使用模块名称时,请注意大写字母“ 7”。
薄扩络拜
包含您的类型并调用解析器
。
不能产生
类型,因为
取决于
,而不是相反。通常,我已经创建了第三个文件,其中包含类型信息ѭ14。 例如, 毫升
下午
T \'。ml
壬驴拿歪竞
)文件中生成的文本。因此,无论您在接口中指定哪种类型(令牌或规则的类型),都需要使用完全限定的类型。 在这里看起来您可以使用完全限定的类型,但是有时这是不可能的,因为该类型涉及函子应用程序。有几种解决方法: 安排在单独的编译单元中构建所有函子。这很容易,但是不起作用,例如如果函子涉及令牌类型。 对ocamlyacc生成的
文件进行后处理以添加标题。您可以通过这种方式做几乎所有事情,但这很丑陋和令人讨厌。 使用Menhir,这是Ocamlyacc的改进替代品。这是一个附加的依赖项,但确实解决了Ocamlyacc的主要缺点。