Ocamlyacc 似乎没有返回完整记录
Ocamlyacc seemingly not returning a full record
我有以下解析器,它应该 return 一条带有 globalVars
和 globalFns
的记录,但它似乎没有。
%start program
%type <Ast.program> program
%%
program:
decls EOF { }
decls:
/* nothing */ { { globalVars = []; globalFns = []; } }
| decls varDecl { { with globalVars = ::.globalVars } }
| decls fnDecl { { with globalFns = ::.globalFns } }
其中 ast.ml
将程序定义为:
type program = {
globalVars : bind list;
globalFns : func_decl list;
}
我收到的错误是:Error: Unbound record field globalVars
当我尝试执行类似以下操作时:
let translate program =
let global_vars =
let global_var m (t, n) =
let init = L.const_int (ltype_of_typ t) 0
in StringMap.add n (L.define_global n init the_module) m in
List.fold_left global_var StringMap.empty program.globalVars in
我实在想不通为什么 program.globalVars
在这里没有绑定。如果有人能指出正确的方向,我将不胜感激。
在当前范围内未绑定的是记录字段 globalVars
而不是 program.globalVars
本身:字段标签存在于定义它们的模块中。为了访问在当前模块外定义的类型的记录字段;需要使用完全限定的字段路径,program.Ast.globalVars
,其中 Ast.globalVars
是模块 Ast
中定义的字段 globalVars
的路径,或者将字段引入范围,通过例如打开模块或注释程序类型:let translate (program:Ast.program)= …
.
我有以下解析器,它应该 return 一条带有 globalVars
和 globalFns
的记录,但它似乎没有。
%start program
%type <Ast.program> program
%%
program:
decls EOF { }
decls:
/* nothing */ { { globalVars = []; globalFns = []; } }
| decls varDecl { { with globalVars = ::.globalVars } }
| decls fnDecl { { with globalFns = ::.globalFns } }
其中 ast.ml
将程序定义为:
type program = {
globalVars : bind list;
globalFns : func_decl list;
}
我收到的错误是:Error: Unbound record field globalVars
当我尝试执行类似以下操作时:
let translate program =
let global_vars =
let global_var m (t, n) =
let init = L.const_int (ltype_of_typ t) 0
in StringMap.add n (L.define_global n init the_module) m in
List.fold_left global_var StringMap.empty program.globalVars in
我实在想不通为什么 program.globalVars
在这里没有绑定。如果有人能指出正确的方向,我将不胜感激。
在当前范围内未绑定的是记录字段 globalVars
而不是 program.globalVars
本身:字段标签存在于定义它们的模块中。为了访问在当前模块外定义的类型的记录字段;需要使用完全限定的字段路径,program.Ast.globalVars
,其中 Ast.globalVars
是模块 Ast
中定义的字段 globalVars
的路径,或者将字段引入范围,通过例如打开模块或注释程序类型:let translate (program:Ast.program)= …
.