首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CIL打印(OCaml)

CIL打印(OCaml)
EN

Stack Overflow用户
提问于 2013-11-01 02:03:42
回答 1查看 322关注 0票数 0

我想根据CIL打印CIL结构(例如Cil.instr ),它有一个类似于Cil.d_instr的函数,我可以用它来打印到错误信息中,比如Errormsg.log "Instruction: %a\n" d_instr i;,我想把它的值存储在一个变量中。我试过:

代码语言:javascript
复制
  let i_str = Printf.sprintf "%a" Pretty.sprint (d_instr i) in ...

但是,这会导致类型错配编译错误。有人能帮我吗?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-01 11:12:57

函数Cil.d_instr具有以下原型:

代码语言:javascript
复制
val d_instr : unit -> instr -> Pretty.doc

因此,要获得Pretty.doc类型的值,需要在指令:d_instr () i之前应用unit类型的值。

然后,要将Pretty.doc转换为string,需要使用Pretty.sprint : width:int -> doc -> string。请注意,您需要提供最大宽度(但如果您愿意,可以使用非常大的宽度)。最后,将这两个部分结合起来,您可以得到:

代码语言:javascript
复制
let i_str = Pretty.sprint max_int (Cil.d_instr () i)

我建议您仔细阅读Prettyhttp://kerneis.github.io/cil/doc/html/cil/api/Pretty.html的文档。它将特别向您解释,尽可能长时间地使用Pretty.doc类型的值,将值与(++)连接起来,并且只在最后转换为字符串(或发送到标准输出)是更有效的。

最后,但在我看来,这是不必要的复杂,如果您真的想使用Printf.sprintf,下面是如何组合它

代码语言:javascript
复制
  let ds_instr () i = Pretty.sprint max_int (Cil.d_instr () i) in
  let i_str = Printf.sprintf "%a" ds_instr i in ...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19719706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档