用CIL(OCaml)打印
我想打印CIL结构,例如用CIL(OCaml)打印,ocaml,berkeley-cil,Ocaml,Berkeley Cil,我想打印CIL结构,例如CIL.instr 根据CIL API,它有一个函数,如CIL.d_instr,我可以使用它打印到Errormsg,如Errormsg.log”指令:%a\n“d_instr I 我想把它的值存储在一个变量中。我试过: let i_str = Printf.sprintf "%a" Pretty.sprint (d_instr i) in ... 但是,这会导致类型不匹配编译错误。 有人能帮我吗?谢谢 Cil.d_instr功能具有以下原型: val d_instr
CIL.instr
根据CIL API,它有一个函数,如CIL.d_instr
,我可以使用它打印到Errormsg,如Errormsg.log”指令:%a\n“d_instr I代码>
我想把它的值存储在一个变量中。我试过:
let i_str = Printf.sprintf "%a" Pretty.sprint (d_instr i) in ...
但是,这会导致类型不匹配编译错误。
有人能帮我吗?谢谢 Cil.d_instr
功能具有以下原型:
val d_instr:unit->instr->Pretty.doc
因此,要获得类型为Pretty.doc
的值,需要在指令之前应用类型为unit
的值:d_instr()i
然后,要将Pretty.doc
转换为string
,需要使用Pretty.sprint:width:int->doc->string
。请注意,您需要提供最大宽度(但如果您愿意,可以使用非常大的宽度)。最后,结合这两个部分,您可以得到:
let i_str=Pretty.sprint max_int(Cil.d_instr()i)
我建议您仔细阅读Pretty
的文档:。它将特别向您解释,尽可能长时间地使用Pretty.doc
类型的值,将值与(++)
串联,并仅在最后转换为字符串(或发送到标准输出)更有效
最后,但在我看来这是不必要的复杂,如果您真的想使用Printf.sprintf
,下面是如何编写它:
让ds_instr()i=Pretty.sprint max_int(Cil.d_instr()i)进入
让i_str=Printf.sprintf“%a”插入。。。
Cil.d_instr功能具有以下原型:
val d_instr:unit->instr->Pretty.doc
因此,要获得类型为Pretty.doc
的值,需要在指令之前应用类型为unit
的值:d_instr()i
然后,要将Pretty.doc
转换为string
,需要使用Pretty.sprint:width:int->doc->string
。请注意,您需要提供最大宽度(但如果您愿意,可以使用非常大的宽度)。最后,结合这两个部分,您可以得到:
let i_str=Pretty.sprint max_int(Cil.d_instr()i)
我建议您仔细阅读Pretty
的文档:。它将特别向您解释,尽可能长时间地使用Pretty.doc
类型的值,将值与(++)
串联,并仅在最后转换为字符串(或发送到标准输出)更有效
最后,但在我看来这是不必要的复杂,如果您真的想使用Printf.sprintf
,下面是如何编写它:
让ds_instr()i=Pretty.sprint max_int(Cil.d_instr()i)进入
让i_str=Printf.sprintf“%a”插入。。。