Project

General

Profile

Revision df647a81 src/basic_library.ml

View differences:

src/basic_library.ml
146 146
	["+";"-";"*";"/";"mod";"&&";"||";"xor";"impl";"<";">";"<=";">=";"!=";"="])
147 147
     @(List.map unary_fun ["uminus";"not"]))
148 148
*)  
149
let pp_c i pp_val fmt vl =
149
let pp_c i get_val_type pp_val fmt vl =
150 150
  match i, vl with
151
  (*  | "ite", [v1; v2; v3] -> Format.fprintf fmt "(%a?(%a):(%a))" pp_val v1 pp_val v2 pp_val v3 *)
151
    | "ite", [v1; v2; v3] -> Format.fprintf fmt "(%a?(%a):(%a))" pp_val v1 pp_val v2 pp_val v3
152 152
    | "uminus", [v] -> Format.fprintf fmt "(- %a)" pp_val v
153 153
    | "not", [v] -> Format.fprintf fmt "(!%a)" pp_val v 
154 154
    | "impl", [v1; v2] -> Format.fprintf fmt "(!%a || %a)" pp_val v1 pp_val v2 
155
    | "=", [v1; v2] when get_val_type v1 == Types.Tbool-> Format.fprintf fmt "((!!%a) == (!!%a))" pp_val v1 pp_val v2
155 156
    | "=", [v1; v2] -> Format.fprintf fmt "(%a == %a)" pp_val v1 pp_val v2 
156 157
    | "mod", [v1; v2] -> Format.fprintf fmt "(%a %% %a)" pp_val v1 pp_val v2 
157 158
    | "xor", [v1; v2] -> Format.fprintf fmt "(%a ^ %a)" pp_val v1 pp_val v2
......
190 191
  match i, vl with
191 192
  | "ite", [v1; v2; v3] -> Format.fprintf fmt "(%a?(%a):(%a))" pp_val v1 pp_val v2 pp_val v3 
192 193
  | "uminus", [v] -> Format.fprintf fmt "(- %a)" pp_val v
193
  | "not", [v] -> Format.fprintf fmt "(!%a)" pp_val v 
194
  | "impl", [v1; v2] -> Format.fprintf fmt "(%a ==> %a)" pp_val v1 pp_val v2 
195
  | "=", [v1; v2] -> ( 
196
    try 
197
      match (get_val_type v1), (get_val_type v2) with
198
      | Types.Tbool, _ | _, Types.Tbool -> Format.fprintf fmt "(%a <==> %a)" pp_val v1 pp_val v2 
199
      | _ -> Format.fprintf fmt "(%a == %a)" pp_val v1 pp_val v2 
200
    with Not_found -> Format.fprintf fmt "(%a == %a)" pp_val v1 pp_val v2 
201
  )
194
  | "not", [v] -> Format.fprintf fmt "((%a == 0)?1:0)" pp_val v 
195
  | "impl", [v1; v2] -> Format.fprintf fmt "(%a?(%a?1:0):1)" pp_val v1 pp_val v2 
196
  | "=", [v1; v2] when get_val_type v1 == Types.Tbool-> Format.fprintf fmt "(((!!%a) == (!!%a))?1:0)" pp_val v1 pp_val v2
197
  | "=", [v1; v2] -> Format.fprintf fmt "((%a == %a)?1:0)" pp_val v1 pp_val v2
202 198
  | "mod", [v1; v2] -> Format.fprintf fmt "(%a %% %a)" pp_val v1 pp_val v2 
203 199
  | "xor", [v1; v2] -> Format.fprintf fmt "(%a ^ %a)" pp_val v1 pp_val v2
204 200
  | _, [v1; v2] -> Format.fprintf fmt "(%a %s %a)" pp_val v1 i pp_val v2 

Also available in: Unified diff