ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
expr2c.h
Go to the documentation of this file.
1
2#pragma once
3
4#include <map>
5#include <set>
7#include <util/irep/expr.h>
11
12std::string expr2c(const exprt &expr, const namespacet &ns, unsigned flags = 0);
13std::string type2c(const typet &type, const namespacet &ns, unsigned flags = 0);
14std::string
15typedef2c(const typet &type, const namespacet &ns, unsigned flags = 0);
16
17class expr2ct : public c_expr2stringt
18{
19public:
21
22 expr2ct(const namespacet &_ns, unsigned _flags) : c_expr2stringt(_ns, _flags)
23 {
24 }
25 virtual ~expr2ct() = default;
26
27 std::string convert(const typet &src) override;
28 std::string convert(const exprt &src) override;
30
31 // Some static methods that we should probably redesign in the future
32 static std::string get_name_shorthand(std::string fullname);
33 static bool is_padding(std::string tag);
34 static bool is_anonymous_member(std::string tag);
35 static bool is_typedef_struct_union(std::string tag);
36
37protected:
38 std::string convert_rec(
39 const typet &src,
40 const c_qualifierst &qualifiers,
41 const std::string &declarator) override;
42
43 std::string convert_struct_union_body(
44 const exprt &src,
45 const exprt::operandst &operands,
46 const struct_union_typet::componentst &components) override;
47 std::string convert_struct(const exprt &src, unsigned &precedence) override;
48 std::string convert_union(const exprt &src, unsigned &precedence) override;
49
50 std::string convert_typecast(const exprt &src, unsigned &precedence) override;
51
52 std::string convert_code_printf(const codet &src, unsigned indent) override;
53 std::string convert_code_free(const codet &src, unsigned indent) override;
54 std::string convert_code_return(const codet &src, unsigned indent) override;
55 std::string convert_code_assign(const codet &src, unsigned indent) override;
56 std::string convert_code_assume(const codet &src, unsigned indent) override;
57 std::string convert_code_assert(const codet &src, unsigned indent) override;
58
59 std::string convert_malloc(const exprt &src, unsigned &precedence) override;
60 std::string convert_realloc(const exprt &src, unsigned &precedence) override;
61 std::string convert_alloca(const exprt &src, unsigned &precedence) override;
62 std::string convert_symbol(const exprt &src, unsigned &precedence) override;
63 std::string convert_constant(const exprt &src, unsigned &precedence) override;
64
65 std::string convert_member(const exprt &src, unsigned precedence) override;
66
67 std::string convert_code_decl(const codet &src, unsigned indent) override;
68 std::string convert(const exprt &src, unsigned &precedence) override;
69
70 std::string convert_same_object(const exprt &src, unsigned &precedence);
71 std::string convert_pointer_offset(
72 const exprt &src,
73 unsigned &precedence [[maybe_unused]]);
74 std::string convert_infinity(
75 const exprt &src [[maybe_unused]],
76 unsigned &precedence [[maybe_unused]]);
77 std::string convert_dynamic_size(const exprt &src, unsigned &precedence);
78
79 std::string convert_ieee_div(const exprt &src, unsigned &precedence);
80 std::string convert_ieee_mul(const exprt &src, unsigned &precedence);
81 std::string convert_ieee_add(const exprt &src, unsigned &precedence);
82 std::string convert_ieee_sub(const exprt &src, unsigned &precedence);
83 std::string convert_ieee_sqrt(const exprt &src, unsigned &precedence);
84
85 std::string convert_nondet(const exprt &src, unsigned &precedence) override;
86 std::string convert_array_of(const exprt &src, unsigned precedence) override;
87
88private:
89};
flagst
Definition c_expr2string.h:21
c_expr2stringt(const namespacet &_ns, unsigned _flags)
Definition c_expr2string.h:35
Definition c_qualifiers.h:7
Definition std_code.h:8
std::string convert_alloca(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1402
std::string convert_ieee_add(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1502
std::string convert_struct_union_typedef(const struct_union_typet &src)
Definition expr2c.cpp:87
std::string convert_member(const exprt &src, unsigned precedence) override
Definition expr2c.cpp:1163
static bool is_anonymous_member(std::string tag)
Definition expr2c.cpp:35
std::string convert_code_assume(const codet &src, unsigned indent) override
Definition expr2c.cpp:473
std::string convert_code_printf(const codet &src, unsigned indent) override
Definition expr2c.cpp:396
std::string convert_realloc(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1383
std::string convert_struct(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1043
std::string convert_rec(const typet &src, const c_qualifierst &qualifiers, const std::string &declarator) override
Definition expr2c.cpp:125
std::string convert_code_decl(const codet &src, unsigned indent) override
Definition expr2c.cpp:1006
static std::string get_name_shorthand(std::string fullname)
Definition expr2c.cpp:19
static bool is_typedef_struct_union(std::string tag)
Definition expr2c.cpp:46
std::string convert_ieee_div(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1526
std::string convert_struct_union_body(const exprt &src, const exprt::operandst &operands, const struct_union_typet::componentst &components) override
Definition expr2c.cpp:1104
std::string convert_code_return(const codet &src, unsigned indent) override
Definition expr2c.cpp:427
expr2ct(const namespacet &_ns, unsigned _flags)
Definition expr2c.h:22
std::string convert_code_assert(const codet &src, unsigned indent) override
Definition expr2c.cpp:462
std::string convert_typecast(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:965
std::string convert_constant(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1214
std::string convert_pointer_offset(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1344
std::string convert_ieee_sub(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1510
std::string convert_ieee_sqrt(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1534
std::string convert_symbol(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:484
std::string convert_union(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1059
virtual ~expr2ct()=default
static bool is_padding(std::string tag)
Definition expr2c.cpp:30
std::string convert_dynamic_size(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1478
std::string convert_array_of(const exprt &src, unsigned precedence) override
Definition expr2c.cpp:1463
std::string convert_infinity(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1494
std::string convert(const typet &src) override
Definition expr2c.cpp:76
std::string convert_malloc(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1367
std::string convert_code_assign(const codet &src, unsigned indent) override
Definition expr2c.cpp:444
std::string convert_same_object(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1310
std::string convert_code_free(const codet &src, unsigned indent) override
Definition expr2c.cpp:416
std::string convert_nondet(const exprt &src, unsigned &precedence) override
Definition expr2c.cpp:1420
std::string convert_ieee_mul(const exprt &src, unsigned &precedence)
Definition expr2c.cpp:1518
Definition expr.h:34
std::vector< exprt > operandst
Definition expr.h:39
Definition namespace.h:10
Definition std_types.h:78
std::vector< componentt > componentst
Definition std_types.h:182
Definition type.h:9
std::string typedef2c(const typet &type, const namespacet &ns, unsigned flags=0)
Definition expr2c.cpp:67
std::string expr2c(const exprt &expr, const namespacet &ns, unsigned flags=0)
Definition expr2c.cpp:54
std::string type2c(const typet &type, const namespacet &ns, unsigned flags=0)
Definition expr2c.cpp:61