Guest User

Untitled

a guest
Jun 1st, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
OCaml 1.76 KB | None | 0 0
  1. #use "imp-syntax.ml";;
  2. #use "imp-cfg.ml";;
  3.  
  4.  
  5. let rec var_used e = match e with
  6.   N m -> ["Vuoto"]
  7.  | Val n -> [n]
  8.  | ArrayVal(n,_) -> [n]
  9.  | Add(e1,e2) -> (var_used e1) @ (var_used e2)
  10.  | Sub(e1,e2) -> (var_used e1) @ (var_used e2)
  11.  | Mul(e1,e2) -> (var_used e1) @ (var_used e2)
  12.  | Eq(e1,e2) -> (var_used e1) @ (var_used e2)
  13.  | Lt(e1,e2) -> (var_used e1) @ (var_used e2)
  14.  | Not e -> var_used e
  15.  | And(e1,e2) -> (var_used e1) @ (var_used e2)
  16.  | Or(e1,e2) -> (var_used e1) @ (var_used e2);;
  17.  
  18.  
  19. let kill (cfg:cfg): ide list = match cfg with
  20.     (l,_) -> let rec kill' l l' = match l with
  21.     [] -> l'
  22.       | (_,b)::l -> (match b with
  23.       BAssignVar(n,_) -> kill' l (l' @ [n])
  24.       | BAssignArray(n,_,_) -> kill' l (l' @ [n])
  25.       | BSkip -> kill' l (l' @ ["Vuoto"])
  26.       | BGuard e -> kill' l (l' @ ["Vuoto"]))
  27.          in kill' l [];;
  28.  
  29.  
  30.  
  31. let gen (cfg:cfg): ide list list = match cfg with
  32.     (l,_) -> let rec gen' l l' = match l with
  33.     [] -> l'
  34.       | (_,b)::l -> (match b with  
  35.     BAssignVar(_,e) -> gen' l (l' @ ([var_used e]))
  36.       | BAssignArray(_,_,e) -> gen' l (l' @ ([var_used e]))
  37.       | BSkip -> gen' l (l' @ [["Vuoto"]])
  38.       | BGuard e ->  gen' l (l' @ ([var_used e])))
  39. in gen' l [];;
  40.    
  41.  
  42.  
  43. let test =
  44.         ImpProg(Dseq(Var "x", Dseq(Var "y", Var "z")),
  45.         Cseq(AssignVar("x", N 2), Cseq(AssignVar("y", N 4),
  46.         Cseq(AssignVar("x", N 1), Cseq(If(Lt(Val "x", Val "y"), AssignVar("z", Val "y"),
  47.         AssignVar("z", Mul(Val "y", Val "y"))), AssignVar("x", Val "z"))))));;
  48.  
  49. kill (cfg_of_imp test);;
  50. gen (cfg_of_imp test);;
  51.  
  52. (*let lv (cfg:cfg) (l: blabel) : ide set = match cfg with
  53.          (* Skip -> []
  54.   | AssignVar(n,v) -> [n]
  55.   | AssignArray( *)
  56.     (l1,l2) -> *)
  57.  
  58. let worklist s =
  59.   let rec worklist' f =
  60.   in worklist' (flow_rev s);;
Add Comment
Please, Sign In to add comment