Frama-C API - Eva_automata
Eva automata are Interpreted_automata where transitions have been translated to the Eva AST and where useless transitions have been replaced by Skip. As such, it essentially differs by its simpler vertex, edge and transitions types.
type vertex_info = Frama_c_kernel.Interpreted_automata.vertex_infotype vertex = private {vertex_kf : Frama_c_kernel.Cil_types.kernel_function;vertex_key : int;vertex_start_of : Frama_c_kernel.Cil_types.stmt option;vertex_info : vertex_info;mutable vertex_wto_index : vertex list;
}type transition = | Skip| Enter of Frama_c_kernel.Cil_types.block| Leave of Frama_c_kernel.Cil_types.block| Return of Eva_ast.exp option * Frama_c_kernel.Cil_types.stmt| Guard of Eva_ast.exp * guard_kind * Frama_c_kernel.Cil_types.stmt| Assign of Eva_ast.lval * Eva_ast.exp * Frama_c_kernel.Cil_types.stmt| Call of Eva_ast.lval option * Eva_ast.lhost * Eva_ast.exp list * Frama_c_kernel.Cil_types.stmt| Init of Eva_ast.varinfo * Eva_ast.init * Frama_c_kernel.Cil_types.stmt| Asm of Frama_c_kernel.Cil_types.attributes * string list * Frama_c_kernel.Cil_types.extended_asm option * Frama_c_kernel.Cil_types.stmt
type edge = private {edge_kf : Frama_c_kernel.Cil_types.kernel_function;edge_key : int;edge_kinstr : Frama_c_kernel.Cil_types.kinstr;edge_transition : transition;edge_loc : Frama_c_kernel.Cil_types.location;
}type wto = vertex Frama_c_kernel.Wto.partitionmodule Transition : Frama_c_kernel.Datatype.S with type t = transitionmodule Vertex : Frama_c_kernel.Datatype.S_with_collections with type t = vertexmodule Edge : Frama_c_kernel.Datatype.S_with_collections with type t = edgemodule Automaton : Frama_c_kernel.Datatype.S with type t = automatonval get_automaton : Frama_c_kernel.Cil_types.kernel_function -> automatonval output_to_dot : Stdlib.out_channel -> automaton -> unitval exit_strategy : automaton -> vertex Frama_c_kernel.Wto.component -> wtoval is_wto_head : vertex -> booltype loop = {graph : graph;(*The complete graph of the englobing function.
*)head : vertex;(*The head of the loop.
*)wto : wto;(*The wto for the loop body (without the loop head).
*)stmt : Frama_c_kernel.Cil_types.stmt;(*The statement at the loop head.
*)
}Builds the loop type for the englobing loop of vertex.
Dataflow analysis
module type Domain = sig ... endAbstract domain for the dataflow analysis. See Interpreted_automata.Domain.
module ForwardAnalysis (D : Domain) : sig ... endForward Dataflow analysis. See Interpreted_automata.ForwardAnalysis.
module BackwardAnalysis (D : Domain) : sig ... endBackward Dataflow analysis. See Interpreted_automata.BackwardAnalysis.
