从OCaml中的元组中提取数据

时间:2015-03-19 05:07:16

标签: tuples ocaml

我试图使用CIL库来解析C源代码。我正在使用其名称搜索特定功能。

let cil_func = Caml.List.find (fun g ->
    match g with
    | GFun(f,_) when (equal f.svar.vname func) -> true
    | _ -> false
) cil_file.globals in
let body g = match g with GFun(f,_) -> f.sbody in
dumpBlock defaultCilPrinter stdout 1 (body cil_func)

所以我有一个fundec *类型的GFun,我试图获得fundec的sbody属性。 进行第二次模式匹配似乎是多余的,更不用说,编译器抱怨它并非详尽无遗。有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以定义自己的函数,只返回fundec:

let rec find_fundec fname = function
| [] -> raise Not_found
| GFun (f, _) :: _ when equal (f.svar.vname fname) -> f (* ? *)
| _ :: t -> find_fundec fname t

然后你的代码看起来更像这样:

let cil_fundec = find_fundec func cil_file.globals in
dumpBlock defaultCilPrinter stdout 1 cil_fundec.sbody

对于它的价值,标记为(* ? *)的行看起来不对。我不明白为什么f.svar.vname会成为一个函数。我只是在那里复制你的代码。

<强>更新

修复了错误(我经常犯的错误),抱歉。