|
cprover
|
Base class for all expressions. More...
#include <expr.h>
Inheritance diagram for exprt:
Collaboration diagram for exprt:Public Types | |
| typedef std::vector< exprt > | operandst |
Public Types inherited from irept | |
| using | baset = tree_implementationt |
Public Types inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > > | |
| using | dt = tree_nodet< irept, forward_list_as_mapt< irep_idt, irept >, true > |
| using | subt = typename dt::subt |
| using | named_subt = typename dt::named_subt |
| using | tree_implementationt = sharing_treet |
| Used to refer to this class from derived classes. | |
Public Member Functions | |
| exprt () | |
| exprt (const irep_idt &_id) | |
| exprt (irep_idt _id, typet _type) | |
| exprt (irep_idt _id, typet _type, operandst &&_operands) | |
| exprt (const irep_idt &id, typet type, source_locationt loc) | |
| typet & | type () |
| Return the type of the expression. | |
| const typet & | type () const |
| bool | has_operands () const |
| Return true if there is at least one operand. | |
| operandst & | operands () |
| const operandst & | operands () const |
| void | reserve_operands (operandst::size_type n) |
| void | copy_to_operands (const exprt &expr) |
Copy the given argument to the end of exprt's operands. | |
| void | add_to_operands (const exprt &expr) |
Add the given argument to the end of exprt's operands. | |
| void | add_to_operands (exprt &&expr) |
Add the given argument to the end of exprt's operands. | |
| void | copy_to_operands (const exprt &e1, const exprt &e2) |
Copy the given arguments to the end of exprt's operands. | |
| void | add_to_operands (const exprt &e1, const exprt &e2) |
Add the given arguments to the end of exprt's operands. | |
| void | add_to_operands (exprt &&e1, exprt &&e2) |
Add the given arguments to the end of exprt's operands. | |
| void | add_to_operands (const exprt &e1, const exprt &e2, const exprt &e3) |
Add the given arguments to the end of exprt's operands. | |
| void | copy_to_operands (const exprt &e1, const exprt &e2, const exprt &e3) |
Copy the given arguments to the end of exprt's operands. | |
| void | add_to_operands (exprt &&e1, exprt &&e2, exprt &&e3) |
Add the given arguments to the end of exprt's operands. | |
| bool | is_constant () const |
| Return whether the expression is a constant. | |
| bool | is_true () const |
Return whether the expression is a constant representing true. | |
| bool | is_false () const |
Return whether the expression is a constant representing false. | |
| bool | is_zero () const |
| Return whether the expression is a constant representing 0. | |
| bool | is_one () const |
| Return whether the expression is a constant representing 1. | |
| bool | is_boolean () const |
| Return whether the expression represents a Boolean. | |
| const source_locationt & | find_source_location () const |
| Get a source_locationt from the expression or from its operands (non-recursively). | |
| const source_locationt & | source_location () const |
| source_locationt & | add_source_location () |
| void | drop_source_location () |
| void | visit (class expr_visitort &visitor) |
| These are pre-order traversal visitors, i.e., the visitor is executed on a node before its children have been visited. | |
| void | visit (class const_expr_visitort &visitor) const |
| void | visit_pre (std::function< void(exprt &)>) |
| void | visit_pre (std::function< void(const exprt &)>) const |
| void | visit_post (std::function< void(exprt &)>) |
| These are post-order traversal visitors, i.e., the visitor is executed on a node after its children have been visited. | |
| void | visit_post (std::function< void(const exprt &)>) const |
| depth_iteratort | depth_begin () |
| depth_iteratort | depth_end () |
| const_depth_iteratort | depth_begin () const |
| const_depth_iteratort | depth_end () const |
| const_depth_iteratort | depth_cbegin () const |
| const_depth_iteratort | depth_cend () const |
| depth_iteratort | depth_begin (std::function< exprt &()> mutate_root) const |
| const_unique_depth_iteratort | unique_depth_begin () const |
| const_unique_depth_iteratort | unique_depth_end () const |
| const_unique_depth_iteratort | unique_depth_cbegin () const |
| const_unique_depth_iteratort | unique_depth_cend () const |
Public Member Functions inherited from irept | |
| bool | is_nil () const |
| bool | is_not_nil () const |
| irept (const irep_idt &_id) | |
| irept (const irep_idt &_id, const named_subt &_named_sub, const subt &_sub) | |
| irept ()=default | |
| const irep_idt & | id () const |
| const std::string & | id_string () const |
| void | id (const irep_idt &_data) |
| const irept & | find (const irep_idt &name) const |
| irept & | add (const irep_idt &name) |
| irept & | add (const irep_idt &name, irept irep) |
| const std::string & | get_string (const irep_idt &name) const |
| const irep_idt & | get (const irep_idt &name) const |
| bool | get_bool (const irep_idt &name) const |
| signed int | get_int (const irep_idt &name) const |
| std::size_t | get_size_t (const irep_idt &name) const |
| long long | get_long_long (const irep_idt &name) const |
| void | set (const irep_idt &name, const irep_idt &value) |
| void | set (const irep_idt &name, irept irep) |
| void | set (const irep_idt &name, const long long value) |
| void | set_size_t (const irep_idt &name, const std::size_t value) |
| void | remove (const irep_idt &name) |
| void | move_to_sub (irept &irep) |
| void | move_to_named_sub (const irep_idt &name, irept &irep) |
| bool | operator== (const irept &other) const |
| bool | operator!= (const irept &other) const |
| void | swap (irept &irep) |
| bool | operator< (const irept &other) const |
| defines ordering on the internal representation | |
| bool | ordering (const irept &other) const |
| defines ordering on the internal representation | |
| int | compare (const irept &i) const |
| defines ordering on the internal representation comments are ignored | |
| void | clear () |
| void | make_nil () |
| subt & | get_sub () |
| const subt & | get_sub () const |
| named_subt & | get_named_sub () |
| const named_subt & | get_named_sub () const |
| std::size_t | hash () const |
| std::size_t | full_hash () const |
| bool | full_eq (const irept &other) const |
| std::string | pretty (unsigned indent=0, unsigned max_indent=0) const |
Public Member Functions inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > > | |
| sharing_treet (irep_idt _id) | |
| sharing_treet (irep_idt _id, named_subt _named_sub, subt _sub) | |
| sharing_treet () | |
| sharing_treet (const sharing_treet &irep) | |
| sharing_treet (sharing_treet &&irep) | |
| sharing_treet & | operator= (const sharing_treet &irep) |
| sharing_treet & | operator= (sharing_treet &&irep) |
| ~sharing_treet () | |
| const dt & | read () const |
| dt & | write () |
Static Public Member Functions | |
| static void | check (const exprt &, const validation_modet) |
| Check that the expression is well-formed (shallow checks only, i.e., subexpressions and its type are not checked). | |
| static void | validate (const exprt &expr, const namespacet &, const validation_modet vm=validation_modet::INVARIANT) |
| Check that the expression is well-formed, assuming that its subexpressions and type have all ready been checked for well-formedness. | |
| static void | validate_full (const exprt &expr, const namespacet &ns, const validation_modet vm=validation_modet::INVARIANT) |
| Check that the expression is well-formed (full check, including checks of all subexpressions and the type) | |
Static Public Member Functions inherited from irept | |
| static bool | is_comment (const irep_idt &name) |
| static std::size_t | number_of_non_comments (const named_subt &) |
| count the number of named_sub elements that are not comments | |
Protected Member Functions | |
| exprt & | op0 () |
| exprt & | op1 () |
| exprt & | op2 () |
| exprt & | op3 () |
| const exprt & | op0 () const |
| const exprt & | op1 () const |
| const exprt & | op2 () const |
| const exprt & | op3 () const |
| exprt & | add_expr (const irep_idt &name) |
| const exprt & | find_expr (const irep_idt &name) const |
Protected Member Functions inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > > | |
| void | detach () |
Additional Inherited Members | |
Static Protected Member Functions inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > > | |
| static void | remove_ref (dt *old_data) |
| static void | nonrecursive_destructor (dt *old_data) |
| Does the same as remove_ref, but using an explicit stack instead of recursion. | |
Protected Attributes inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > > | |
| dt * | data |
Static Protected Attributes inherited from sharing_treet< irept, forward_list_as_mapt< irep_idt, irept > > | |
| static dt | empty_d |
Base class for all expressions.
Inherits from irept and has operands (stored as unnamed children of irept), and a type (which is a named sub with identifier ID_type). The class contains functions to access and modify the operands, as well as visitor utilities.
The example below shows the irept structure of the sum of integers 3 and 5.
| typedef std::vector<exprt> exprt::operandst |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
Check that the expression is well-formed (shallow checks only, i.e., subexpressions and its type are not checked).
Subclasses may override this function to provide specific well-formedness checks for the corresponding expressions.
The validation mode indicates whether well-formedness check failures are reported via DATA_INVARIANT violations or exceptions.
|
inline |
| depth_iteratort exprt::depth_begin | ( | ) |
| const_depth_iteratort exprt::depth_begin | ( | ) | const |
| depth_iteratort exprt::depth_begin | ( | std::function< exprt &()> | mutate_root | ) | const |
| const_depth_iteratort exprt::depth_cbegin | ( | ) | const |
| const_depth_iteratort exprt::depth_cend | ( | ) | const |
| depth_iteratort exprt::depth_end | ( | ) |
| const_depth_iteratort exprt::depth_end | ( | ) | const |
| const source_locationt & exprt::find_source_location | ( | ) | const |
Get a source_locationt from the expression or from its operands (non-recursively).
If no source location is found, a nil source_locationt is returned.
|
inline |
| bool exprt::is_boolean | ( | ) | const |
| bool exprt::is_constant | ( | ) | const |
| bool exprt::is_false | ( | ) | const |
| bool exprt::is_one | ( | ) | const |
Return whether the expression is a constant representing 1.
Will consider the following types: ID_integer, ID_natural, ID_rational, ID_unsignedbv, ID_signedbv, ID_c_bool, ID_c_bit_field, ID_fixedbv, ID_floatbv.
For all other types, return false.
| bool exprt::is_true | ( | ) | const |
| bool exprt::is_zero | ( | ) | const |
Return whether the expression is a constant representing 0.
Will consider the following types: ID_integer, ID_natural, ID_rational, ID_unsignedbv, ID_signedbv, ID_c_bool, ID_c_bit_field, ID_fixedbv, ID_floatbv, ID_pointer.
For ID_pointer, returns true iff the value is a zero string or a null pointer. For everything not in the above list, return false.
|
inline |
|
inline |
|
inline |
| const_unique_depth_iteratort exprt::unique_depth_begin | ( | ) | const |
| const_unique_depth_iteratort exprt::unique_depth_cbegin | ( | ) | const |
| const_unique_depth_iteratort exprt::unique_depth_cend | ( | ) | const |
| const_unique_depth_iteratort exprt::unique_depth_end | ( | ) | const |
|
inlinestatic |
Check that the expression is well-formed, assuming that its subexpressions and type have all ready been checked for well-formedness.
Subclasses may override this function to provide specific well-formedness checks for the corresponding expressions.
The validation mode indicates whether well-formedness check failures are reported via DATA_INVARIANT violations or exceptions.
|
inlinestatic |
Check that the expression is well-formed (full check, including checks of all subexpressions and the type)
Subclasses may override this function, though in most cases the provided implementation should be sufficient.
The validation mode indicates whether well-formedness check failures are reported via DATA_INVARIANT violations or exceptions.
| void exprt::visit | ( | class const_expr_visitort & | visitor | ) | const |
| void exprt::visit | ( | class expr_visitort & | visitor | ) |
| void exprt::visit_post | ( | std::function< void(const exprt &)> | visitor | ) | const |
| void exprt::visit_post | ( | std::function< void(exprt &)> | visitor | ) |
| void exprt::visit_pre | ( | std::function< void(const exprt &)> | visitor | ) | const |
| void exprt::visit_pre | ( | std::function< void(exprt &)> | visitor | ) |