я на самом деле на написание Personnal Frama-C плагин, содержащие эти четыре файла:величину несвязанных с отказом от Format.fprintf
analyseTU_core.ml
module Options = AnalyseTU_options
open Cil_types
let rec member x list1 = match list1 with
[]->false
|hd :: tl -> if hd = x then true else member x tl
let rec sandr list2 result= match list2 with
[]-> Format.fprintf out "job termine"
|hd :: tl -> if member hd result = false then begin result::hd ; Format.fprintf out hd; sandr tl result end
else sandr tl result
class print_analyse out = object
inherit Visitor.frama_c_inplace
method vstmt s=
let listing =[] in
let impacted = !Db.Impact.compute_pragmas in
let impacted2= impacted.Stmt.loc in
sandr impacted2 listing;
Cil.DoChildren
end
и:
analyseTU_register.ml
open AnalyseTU_options
open AnalyseTU_core
let run() =
if Enabled.get() then
let filename=OutputFile.get() in
let chan = open_out filename in
let fmt = Format.formatter_of_out_channel chan in
Visitor.visitFramacFileSameGlobals (new print_analyse fmt) (Ast.get());
close_out chan
let() = Db.Main.extend run
и:
analyseTU_options.ml
module Self = Plugin.register
(struct
let name = "analyse TU"
let shortname = "TU"
let help = "impacted statements computation from a source code modification and display consequently unit tests to be run in an output file"
end)
module Enabled = Self.False
(struct
let optilon_name = "-TU"
let help = "when on (off by default), give the unit tests to be run"
end)
module OutputFile = Self.String
(struct
let option_name = "-TU-output"
let default = "TUresults.txt"
let arg_name = "output-file"
let help = "name of the output file"
end)
и, наконец, Makefile:
FRAMAC_SHARE := $(shell frama-c -print-path)
FRAMAC_LIBDIR := $(shell frama-c -print-libpath)
PLUGIN_NAME = analyseTU
PLUGIN_CMO = analyseTU_options analyseTU_core analyseTU_register
include $(FRAMAC_SHARE)/Makefile.dynamic
так, когда я скомпилировать его с помощью команды макияжем, на самом деле я получаю:
FILE "analyseTU_core.ml", line 9 :
Error: unbound value out
make : *** [analyseTU_core.cmo] erreur 2
i так думал, что это произошло из-за того, что «out» неизвестен компилятору, и я переместил «out» на chan. Похоже, я получал ту же ошибку.
Тот факт, что «из» не определен в коде учебника руководства разработчика делает, наконец, я думаю, что эта ошибка не то, что я думаю, что это ...
Вы когда-нибудь сталкивались с этим? если да, то как вы с этим справились?
Просто вне не определено. Прежде чем перейти к таким сложным приложениям, вы должны играть более простые примеры OCaml. – camlspotter