let rec print_parsed_expression fmt = function
  | PVar s -> Format.fprintf fmt "%s" s
  | PPrm (f,s) -> Format.fprintf fmt "%s().%s" f s
  | PCst (IntConstant s) -> Format.fprintf fmt "%s" s
  | PCst (FloatConstant s) -> Format.fprintf fmt "%s" s
  | PCst (StringConstant s) -> Format.fprintf fmt "%S" s
  | PCst (WStringConstant s) -> Format.fprintf fmt "%S" s
  | PBinop(bop,e1,e2) ->
    Format.fprintf fmt "(@[%a@])@ %a@ (@[%a@])"
      print_parsed_expression e1 Cil.d_binop (Logic_typing.type_binop bop)
      print_parsed_expression e2
  | PUnop(uop,e) -> Format.fprintf fmt "%s@;(@[%a@])"
    (string_of_unop uop)
    print_parsed_expression e
  | PArrget(e1,e2) -> Format.fprintf fmt "%a@;[@(%a@]]"
    print_parsed_expression e1 print_parsed_expression e2
  | PField(e,s) -> Format.fprintf fmt "%a.%s" print_parsed_expression e s
  | PArrow(e,s) -> Format.fprintf fmt "%a->%s" print_parsed_expression e s