Module Tai.Domain_builder

Builds the domain used for the analysis, as specified by the expression given to -tai-domain.

Domain AST

Simple syntax tree used to represent the domain used. Useful to specify the analysis from the command line via the -tai-domain argument. See parser.mly for the parser that creates this tree.

type domain_id = string
type product =
  1. | Basic
  2. | Left
  3. | Both

The three types of product, matching the products in Domains.Product

type ssa_domain =
  1. | SSA_Domain of domain_id
  2. | SSA_Functor of domain_id * ssa_domain
  3. | SSA_Product of ssa_domain * ssa_domain
  4. | SSA_Numeric of domain_id * domain_id

Syntax tree for an SSA domain (i.e. a domain that appears under the Domains.Lift functor

type classical_domain =
  1. | Classical_Domain of domain_id
  2. | Classical_Functor of domain_id * classical_domain
  3. | Classical_Product of classical_domain * classical_domain
  4. | Classical_Numeric of domain_id * domain_id
  5. | Lift of bool * ssa_domain

Syntax tree for a classical/IMP (top-level) domain.

val svas : (string * (module Single_value_abstraction.Sig.SingleValueAbstraction)) list

All single value abstractions from the Single_value_abstraction library

Builder for the full domain

Types for casting down to contained domains

type ('state, 'sva) numeric = {
  1. numeric_state : 'state -> 'sva Ast.Program.VarMap.t;
  2. expr_forwards : 'state -> Ast.Program.VarExpr.t -> 'sva;
}

Used to cast to a contained IMP Numeric domain

type ('state, 'sva) ssa_numeric = {
  1. ssa_numeric_state : 'state -> 'sva Ast.Program.SSAExpr.Map.t;
  2. ssa_expr_forwards : 'state -> Ast.Program.SSAExpr.t -> 'sva;
  3. ssa_bind : 'state -> Ast.Program.VarExpr.t -> Ast.Program.SSAExpr.t;
  4. var_store : 'state -> Ast.Program.SSAExpr.t Ast.Program.VarMap.t;
}

Used to cast to a contained SSA Numeric domain from an IMP Domain

module type GRAPH_WITH_CAST = sig ... end

Used to cast to a contained free algebra to generate the graph

Builder module

The builder is parameterized by the default single value abstraction, used when unspecified in numeric domains. This default is the only one usable for numeric comparisons.