该函数Cil.d_instr具有以下原型:
val d_instr : unit -> instr -> Pretty.doc
因此,要获得 type 的值Pretty.doc,您需要unit在指令之前应用 type 的值:d_instr () i。
然后,要将 a 转换Pretty.doc为 a string,您需要使用Pretty.sprint : width:int -> doc -> string. 请注意,您需要提供最大宽度(但如果您愿意,可以使用非常大的宽度)。最后,结合这两个部分,你得到:
let i_str = Pretty.sprint max_int (Cil.d_instr () i)
我建议您仔细阅读以下文档Pretty: http: //kerneis.github.io/cil/doc/html/cil/api/Pretty.html。它将特别向您解释,Pretty.doc尽可能长地使用类型值,将值与 连接(++),并仅在最后转换为字符串(或发送到标准输出)会更有效。
最后,但在我看来这是不必要的复杂,如果你真的想使用,这里是如何组合它Printf.sprintf:
let ds_instr () i = Pretty.sprint max_int (Cil.d_instr () i) in
let i_str = Printf.sprintf "%a" ds_instr i in ...