Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #use "imp-syntax.ml";;
- #use "imp-cfg.ml";;
- let rec var_used e = match e with
- N m -> ["Vuoto"]
- | Val n -> [n]
- | ArrayVal(n,_) -> [n]
- | Add(e1,e2) -> (var_used e1) @ (var_used e2)
- | Sub(e1,e2) -> (var_used e1) @ (var_used e2)
- | Mul(e1,e2) -> (var_used e1) @ (var_used e2)
- | Eq(e1,e2) -> (var_used e1) @ (var_used e2)
- | Lt(e1,e2) -> (var_used e1) @ (var_used e2)
- | Not e -> var_used e
- | And(e1,e2) -> (var_used e1) @ (var_used e2)
- | Or(e1,e2) -> (var_used e1) @ (var_used e2);;
- let kill (cfg:cfg): ide list = match cfg with
- (l,_) -> let rec kill' l l' = match l with
- [] -> l'
- | (_,b)::l -> (match b with
- BAssignVar(n,_) -> kill' l (l' @ [n])
- | BAssignArray(n,_,_) -> kill' l (l' @ [n])
- | BSkip -> kill' l (l' @ ["Vuoto"])
- | BGuard e -> kill' l (l' @ ["Vuoto"]))
- in kill' l [];;
- let gen (cfg:cfg): ide list list = match cfg with
- (l,_) -> let rec gen' l l' = match l with
- [] -> l'
- | (_,b)::l -> (match b with
- BAssignVar(_,e) -> gen' l (l' @ ([var_used e]))
- | BAssignArray(_,_,e) -> gen' l (l' @ ([var_used e]))
- | BSkip -> gen' l (l' @ [["Vuoto"]])
- | BGuard e -> gen' l (l' @ ([var_used e])))
- in gen' l [];;
- let test =
- ImpProg(Dseq(Var "x", Dseq(Var "y", Var "z")),
- Cseq(AssignVar("x", N 2), Cseq(AssignVar("y", N 4),
- Cseq(AssignVar("x", N 1), Cseq(If(Lt(Val "x", Val "y"), AssignVar("z", Val "y"),
- AssignVar("z", Mul(Val "y", Val "y"))), AssignVar("x", Val "z"))))));;
- kill (cfg_of_imp test);;
- gen (cfg_of_imp test);;
- (*let lv (cfg:cfg) (l: blabel) : ide set = match cfg with
- (* Skip -> []
- | AssignVar(n,v) -> [n]
- | AssignArray( *)
- (l1,l2) -> *)
- let worklist s =
- let rec worklist' f =
- in worklist' (flow_rev s);;
Add Comment
Please, Sign In to add comment