diff options
author | Alex Auvolat <alex.auvolat@ansys.com> | 2014-07-08 10:47:49 +0200 |
---|---|---|
committer | Alex Auvolat <alex.auvolat@ansys.com> | 2014-07-08 10:47:49 +0200 |
commit | bbdb36bfad796b26b16233e1693bb9dc8a909130 (patch) | |
tree | ae546daa64c5419b558af23a672422f0663f7c70 /abstract/enum_domain_edd.ml | |
parent | 3b647cab0d3ac143b97524e6b0a406c349898db5 (diff) | |
download | scade-analyzer-bbdb36bfad796b26b16233e1693bb9dc8a909130.tar.gz scade-analyzer-bbdb36bfad796b26b16233e1693bb9dc8a909130.zip |
Adapt abs_interp to use ENUM_DOMAIN2 (this is a test...)
Diffstat (limited to 'abstract/enum_domain_edd.ml')
-rw-r--r-- | abstract/enum_domain_edd.ml | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/abstract/enum_domain_edd.ml b/abstract/enum_domain_edd.ml index 60f2d3b..a372772 100644 --- a/abstract/enum_domain_edd.ml +++ b/abstract/enum_domain_edd.ml @@ -1,9 +1,41 @@ open Ast open Formula open Util -open Enum_domain -module EDD : ENUM_ENVIRONMENT_DOMAIN = struct +module type ENUM_ENVIRONMENT_DOMAIN2 = sig + type t + + type item = string + + (* construction *) + val top : (id * item list) list -> t + val bot : (id * item list) list -> t + val is_bot : t -> bool + + (* variable management *) + val vars : t -> (id * item list) list + + val forgetvar : t -> id -> t + val forgetvars : t -> id list -> t + val project : t -> id -> item list + + (* set-theoretic operations *) + val join : t -> t -> t (* union *) + val meet : t -> t -> t (* intersection *) + + val subset : t -> t -> bool + val eq : t -> t -> bool + + (* abstract operations *) + val apply_cons : t -> enum_cons -> t + val apply_cl : t -> enum_cons list -> t + val assign : t -> (id * id) list -> t + + (* pretty-printing *) + val print : Format.formatter -> t -> unit +end + +module EDD : ENUM_ENVIRONMENT_DOMAIN2 = struct exception Top type item = string @@ -132,11 +164,19 @@ module EDD : ENUM_ENVIRONMENT_DOMAIN = struct (* top : (id * item list) list -> t + bot : (id * item list) list -> t *) let top vars = let order = Hashtbl.create 12 in List.iteri (fun i (id, _) -> Hashtbl.add order id i) vars; { vars; order; root = DTop } + let bot vars = let t = top vars in { t with root = DBot } + + (* + is_bot : t -> bool + *) + let is_bot x = (x.root = DBot) + (* vars : t -> (id * item list) list *) @@ -243,8 +283,8 @@ module EDD : ENUM_ENVIRONMENT_DOMAIN = struct apply_cl : t -> enum_cons list -> t *) let apply_cons v x = - let v = meet v (of_cons v x) in - if v.root = DBot then [] else [v] + meet v (of_cons v x) + let apply_cl v ec = let rec cl_k = function | [] -> { v with root = DTop } |