标题中的函数具有以下签名:
val select_stmt :
(set -> spare:bool -> Cil_types.stmt -> Cil_types.kernel_function -> set)
Pervasives.ref
我想使用此函数,但我的问题是关于set
类型为type set = SlicingTypes.Fct_user_crit.t Cil_datatype.Varinfo.Map.t
的参数。我不知道如何初始化此参数,之后我想打印结果。如果有人能给我一个例子
答案 0 :(得分:3)
在select_stmt
之上,您的值为empty_selects
,其文档表明它代表一个空选择。在此之后,切片的API有点神秘,但如果我没有弄错的话,你应该能够获得一条切片,其中包含以下几行(未经测试):
let prj =
Db.Slicing.(
let sp = !Project.mk_project "my slicing project" in
let selection = Select.(!select_stmt empty_selects s kf) in
let () = Request.add_selection sp selection in
Project.extract "my frama-c project" sp)
in
File.pretty_ast ~prj ()
基本上,您必须创建一个切片项目,您可以在其上设置一定数量的选项,尤其是您想要的切片标准。当您对切片项目的状态感到满意时,您可以从中提取一个新的Frama-C项目,并且可以正常打印这个新项目(当然您也可以对其进行其他分析)。