该函数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 ...