cprover
exprt Class Reference

Base class for all expressions. More...

#include <expr.h>

+ Inheritance diagram for exprt:
+ Collaboration diagram for exprt:

Public Types

typedef std::vector< exprtoperandst
 
- Public Types inherited from irept
typedef std::vector< ireptsubt
 
typedef std::map< irep_namet, ireptnamed_subt
 

Public Member Functions

 exprt ()
 
 exprt (const irep_idt &_id)
 
 exprt (const irep_idt &_id, const typet &_type)
 
typettype ()
 Return the type of the expression. More...
 
const typettype () const
 
bool has_operands () const
 Return true if there is at least one operand. More...
 
operandstoperands ()
 
const operandstoperands () const
 
exprtop0 ()
 
exprtop1 ()
 
exprtop2 ()
 
exprtop3 ()
 
const exprtop0 () const
 
const exprtop1 () const
 
const exprtop2 () const
 
const exprtop3 () const
 
void reserve_operands (operandst::size_type n)
 
void move_to_operands (exprt &expr)
 Move the given argument to the end of exprt's operands. More...
 
void move_to_operands (exprt &e1, exprt &e2)
 Move the given arguments to the end of exprt's operands. More...
 
void move_to_operands (exprt &e1, exprt &e2, exprt &e3)
 Move the given arguments to the end of exprt's operands. More...
 
void copy_to_operands (const exprt &expr)
 Copy the given argument to the end of exprt's operands. More...
 
void add_to_operands (const exprt &expr)
 Add the given argument to the end of exprt's operands. More...
 
void add_to_operands (exprt &&expr)
 Add the given argument to the end of exprt's operands. More...
 
void copy_to_operands (const exprt &e1, const exprt &e2)
 Copy the given arguments to the end of exprt's operands. More...
 
void add_to_operands (const exprt &e1, const exprt &e2)
 Add the given arguments to the end of exprt's operands. More...
 
void add_to_operands (exprt &&e1, exprt &&e2)
 Add the given arguments to the end of exprt's operands. More...
 
void add_to_operands (const exprt &e1, const exprt &e2, const exprt &e3)
 Add the given arguments to the end of exprt's operands. More...
 
void copy_to_operands (const exprt &e1, const exprt &e2, const exprt &e3)
 Copy the given arguments to the end of exprt's operands. More...
 
void add_to_operands (exprt &&e1, exprt &&e2, exprt &&e3)
 Add the given arguments to the end of exprt's operands. More...
 
void make_typecast (const typet &_type)
 Create a typecast_exprt to the given type. More...
 
void make_not ()
 Negate the expression. More...
 
void make_true ()
 Replace the expression by a Boolean expression representing true. More...
 
void make_false ()
 Replace the expression by a Boolean expression representing false. More...
 
void make_bool (bool value)
 Replace the expression by a Boolean expression representing value. More...
 
bool is_constant () const
 Return whether the expression is a constant. More...
 
bool is_true () const
 Return whether the expression is a constant representing true. More...
 
bool is_false () const
 Return whether the expression is a constant representing false. More...
 
bool is_zero () const
 Return whether the expression is a constant representing 0. More...
 
bool is_one () const
 Return whether the expression is a constant representing 1. More...
 
bool is_boolean () const
 Return whether the expression represents a Boolean. More...
 
const source_locationtfind_source_location () const
 Get a source_locationt from the expression or from its operands (non-recursively). More...
 
const source_locationtsource_location () const
 
source_locationtadd_source_location ()
 
void visit (class expr_visitort &visitor)
 
void visit (class const_expr_visitort &visitor) 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 ()
 
 irept (const irept &irep)
 
 irept (irept &&irep)
 
ireptoperator= (const irept &irep)
 
ireptoperator= (irept &&irep)
 
 ~irept ()
 
const irep_idtid () const
 
const std::string & id_string () const
 
void id (const irep_idt &_data)
 
const ireptfind (const irep_namet &name) const
 
ireptadd (const irep_namet &name)
 
ireptadd (const irep_namet &name, const irept &irep)
 
const std::string & get_string (const irep_namet &name) const
 
const irep_idtget (const irep_namet &name) const
 
bool get_bool (const irep_namet &name) const
 
signed int get_int (const irep_namet &name) const
 
unsigned int get_unsigned_int (const irep_namet &name) const
 
std::size_t get_size_t (const irep_namet &name) const
 
long long get_long_long (const irep_namet &name) const
 
void set (const irep_namet &name, const irep_idt &value)
 
void set (const irep_namet &name, const irept &irep)
 
void set (const irep_namet &name, const long long value)
 
void remove (const irep_namet &name)
 
void move_to_sub (irept &irep)
 
void move_to_named_sub (const irep_namet &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 More...
 
bool ordering (const irept &other) const
 defines ordering on the internal representation More...
 
int compare (const irept &i) const
 defines ordering on the internal representation More...
 
void clear ()
 
void make_nil ()
 
subtget_sub ()
 
const subtget_sub () const
 
named_subtget_named_sub ()
 
const named_subtget_named_sub () const
 
named_subtget_comments ()
 
const named_subtget_comments () 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
 
const dtread () const
 
dtwrite ()
 

Static Public Member Functions

static void check (const exprt &expr, const validation_modet vm=validation_modet::INVARIANT)
 Check that the expression is well-formed (shallow checks only, i.e., subexpressions and its type are not checked). More...
 
static void validate (const exprt &expr, const namespacet &ns, 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. More...
 
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) More...
 

Protected Member Functions

exprtadd_expr (const irep_idt &name)
 
const exprtfind_expr (const irep_idt &name) const
 
- Protected Member Functions inherited from irept
void detach ()
 

Additional Inherited Members

- Static Protected Member Functions inherited from irept
static bool is_comment (const irep_namet &name)
 
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. More...
 
- Protected Attributes inherited from irept
dtdata
 
- Static Protected Attributes inherited from irept
static dt empty_d
 

Detailed Description

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.

Some context available here: exprt section in util module

Definition at line 54 of file expr.h.

Member Typedef Documentation

◆ operandst

typedef std::vector<exprt> exprt::operandst

Definition at line 57 of file expr.h.

Constructor & Destructor Documentation

◆ exprt() [1/3]

exprt::exprt ( )
inline

Definition at line 60 of file expr.h.

◆ exprt() [2/3]

exprt::exprt ( const irep_idt _id)
inlineexplicit

Definition at line 61 of file expr.h.

◆ exprt() [3/3]

exprt::exprt ( const irep_idt _id,
const typet _type 
)
inline

Definition at line 62 of file expr.h.

Member Function Documentation

◆ add_expr()

exprt& exprt::add_expr ( const irep_idt name)
inlineprotected

Definition at line 299 of file expr.h.

◆ add_source_location()

source_locationt& exprt::add_source_location ( )
inline

Definition at line 236 of file expr.h.

◆ add_to_operands() [1/6]

void exprt::add_to_operands ( const exprt expr)
inline

Add the given argument to the end of exprt's operands.

Parameters
exprexprt to append to the operands

Definition at line 130 of file expr.h.

◆ add_to_operands() [2/6]

void exprt::add_to_operands ( exprt &&  expr)
inline

Add the given argument to the end of exprt's operands.

Parameters
exprexprt to append to the operands

Definition at line 137 of file expr.h.

◆ add_to_operands() [3/6]

void exprt::add_to_operands ( const exprt e1,
const exprt e2 
)
inline

Add the given arguments to the end of exprt's operands.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands

Definition at line 158 of file expr.h.

◆ add_to_operands() [4/6]

void exprt::add_to_operands ( exprt &&  e1,
exprt &&  e2 
)
inline

Add the given arguments to the end of exprt's operands.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands

Definition at line 166 of file expr.h.

◆ add_to_operands() [5/6]

void exprt::add_to_operands ( const exprt e1,
const exprt e2,
const exprt e3 
)
inline

Add the given arguments to the end of exprt's operands.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands
e3third exprt to append to the operands

Definition at line 180 of file expr.h.

◆ add_to_operands() [6/6]

void exprt::add_to_operands ( exprt &&  e1,
exprt &&  e2,
exprt &&  e3 
)
inline

Add the given arguments to the end of exprt's operands.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands
e3third exprt to append to the operands

Definition at line 204 of file expr.h.

◆ check()

static void exprt::check ( const exprt expr,
const validation_modet  vm = validation_modet::INVARIANT 
)
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.

Definition at line 249 of file expr.h.

◆ copy_to_operands() [1/3]

void exprt::copy_to_operands ( const exprt expr)
inline

Copy the given argument to the end of exprt's operands.

Parameters
exprexprt to append to the operands

Definition at line 123 of file expr.h.

◆ copy_to_operands() [2/3]

void exprt::copy_to_operands ( const exprt e1,
const exprt e2 
)
inline

Copy the given arguments to the end of exprt's operands.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands

Definition at line 145 of file expr.h.

◆ copy_to_operands() [3/3]

void exprt::copy_to_operands ( const exprt e1,
const exprt e2,
const exprt e3 
)
inline

Copy the given arguments to the end of exprt's operands.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands
e3third exprt to append to the operands

Definition at line 189 of file expr.h.

◆ depth_begin() [1/3]

depth_iteratort exprt::depth_begin ( )

Definition at line 330 of file expr.cpp.

◆ depth_begin() [2/3]

const_depth_iteratort exprt::depth_begin ( ) const

Definition at line 334 of file expr.cpp.

◆ depth_begin() [3/3]

depth_iteratort exprt::depth_begin ( std::function< exprt &()>  mutate_root) const

Definition at line 342 of file expr.cpp.

◆ depth_cbegin()

const_depth_iteratort exprt::depth_cbegin ( ) const

Definition at line 338 of file expr.cpp.

◆ depth_cend()

const_depth_iteratort exprt::depth_cend ( ) const

Definition at line 340 of file expr.cpp.

◆ depth_end() [1/2]

depth_iteratort exprt::depth_end ( )

Definition at line 332 of file expr.cpp.

◆ depth_end() [2/2]

const_depth_iteratort exprt::depth_end ( ) const

Definition at line 336 of file expr.cpp.

◆ find_expr()

const exprt& exprt::find_expr ( const irep_idt name) const
inlineprotected

Definition at line 304 of file expr.h.

◆ find_source_location()

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.

Returns
A source location if found in the expression or its operands, nil otherwise.

Definition at line 277 of file expr.cpp.

◆ has_operands()

bool exprt::has_operands ( ) const
inline

Return true if there is at least one operand.

Definition at line 75 of file expr.h.

◆ is_boolean()

bool exprt::is_boolean ( ) const

Return whether the expression represents a Boolean.

Returns
True if is a Boolean, false otherwise.

Definition at line 165 of file expr.cpp.

◆ is_constant()

bool exprt::is_constant ( ) const

Return whether the expression is a constant.

Returns
True if is a constant, false otherwise

Definition at line 115 of file expr.cpp.

◆ is_false()

bool exprt::is_false ( ) const

Return whether the expression is a constant representing false.

Returns
True if is a Boolean constant representing false, false otherwise.

Definition at line 131 of file expr.cpp.

◆ is_one()

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.

Returns
True if has value 1, false otherwise.

Definition at line 228 of file expr.cpp.

◆ is_true()

bool exprt::is_true ( ) const

Return whether the expression is a constant representing true.

Returns
True if is a Boolean constant representing true, false otherwise.

Definition at line 122 of file expr.cpp.

◆ is_zero()

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.

Returns
True if has value 0, false otherwise.

Definition at line 178 of file expr.cpp.

◆ make_bool()

void exprt::make_bool ( bool  value)

Replace the expression by a Boolean expression representing value.

Parameters
valuethe Boolean value to give to the expression
Deprecated:
use constructors instead

Definition at line 141 of file expr.cpp.

◆ make_false()

void exprt::make_false ( )

Replace the expression by a Boolean expression representing false.

Deprecated:
use constructors instead

Definition at line 157 of file expr.cpp.

◆ make_not()

void exprt::make_not ( )

Negate the expression.

Simplifications:

  • If the expression is trivially true, make it false, and vice versa.
  • If the expression is an ID_not, remove the not.
    Deprecated:
    use constructors instead

Definition at line 86 of file expr.cpp.

◆ make_true()

void exprt::make_true ( )

Replace the expression by a Boolean expression representing true.

Deprecated:
use constructors instead

Definition at line 149 of file expr.cpp.

◆ make_typecast()

void exprt::make_typecast ( const typet _type)

Create a typecast_exprt to the given type.

Parameters
_typecast destination type
Deprecated:
use constructors instead

Definition at line 74 of file expr.cpp.

◆ move_to_operands() [1/3]

void exprt::move_to_operands ( exprt expr)

Move the given argument to the end of exprt's operands.

The argument is destroyed and mutated to a reference to a nil irept.

Parameters
exprexprt to append to the operands

Definition at line 29 of file expr.cpp.

◆ move_to_operands() [2/3]

void exprt::move_to_operands ( exprt e1,
exprt e2 
)

Move the given arguments to the end of exprt's operands.

The arguments are destroyed and mutated to a reference to a nil irept.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands

Definition at line 40 of file expr.cpp.

◆ move_to_operands() [3/3]

void exprt::move_to_operands ( exprt e1,
exprt e2,
exprt e3 
)

Move the given arguments to the end of exprt's operands.

The arguments are destroyed and mutated to a reference to a nil irept.

Parameters
e1first exprt to append to the operands
e2second exprt to append to the operands
e3third exprt to append to the operands

Definition at line 57 of file expr.cpp.

◆ op0() [1/2]

exprt& exprt::op0 ( )
inline

Definition at line 84 of file expr.h.

◆ op0() [2/2]

const exprt& exprt::op0 ( ) const
inline

Definition at line 96 of file expr.h.

◆ op1() [1/2]

exprt& exprt::op1 ( )
inline

Definition at line 87 of file expr.h.

◆ op1() [2/2]

const exprt& exprt::op1 ( ) const
inline

Definition at line 99 of file expr.h.

◆ op2() [1/2]

exprt& exprt::op2 ( )
inline

Definition at line 90 of file expr.h.

◆ op2() [2/2]

const exprt& exprt::op2 ( ) const
inline

Definition at line 102 of file expr.h.

◆ op3() [1/2]

exprt& exprt::op3 ( )
inline

Definition at line 93 of file expr.h.

◆ op3() [2/2]

const exprt& exprt::op3 ( ) const
inline

Definition at line 105 of file expr.h.

◆ operands() [1/2]

operandst& exprt::operands ( )
inline

Definition at line 78 of file expr.h.

◆ operands() [2/2]

const operandst& exprt::operands ( ) const
inline

Definition at line 81 of file expr.h.

◆ reserve_operands()

void exprt::reserve_operands ( operandst::size_type  n)
inline

Definition at line 108 of file expr.h.

◆ source_location()

const source_locationt& exprt::source_location ( ) const
inline

Definition at line 231 of file expr.h.

◆ type() [1/2]

typet& exprt::type ( )
inline

Return the type of the expression.

Definition at line 68 of file expr.h.

◆ type() [2/2]

const typet& exprt::type ( ) const
inline

Definition at line 69 of file expr.h.

◆ unique_depth_begin()

const_unique_depth_iteratort exprt::unique_depth_begin ( ) const

Definition at line 347 of file expr.cpp.

◆ unique_depth_cbegin()

const_unique_depth_iteratort exprt::unique_depth_cbegin ( ) const

Definition at line 351 of file expr.cpp.

◆ unique_depth_cend()

const_unique_depth_iteratort exprt::unique_depth_cend ( ) const

Definition at line 353 of file expr.cpp.

◆ unique_depth_end()

const_unique_depth_iteratort exprt::unique_depth_end ( ) const

Definition at line 349 of file expr.cpp.

◆ validate()

static void exprt::validate ( const exprt expr,
const namespacet ns,
const validation_modet  vm = validation_modet::INVARIANT 
)
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.

Definition at line 263 of file expr.h.

◆ validate_full()

static void exprt::validate_full ( const exprt expr,
const namespacet ns,
const validation_modet  vm = validation_modet::INVARIANT 
)
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.

Definition at line 279 of file expr.h.

◆ visit() [1/2]

void exprt::visit ( class expr_visitort visitor)

Definition at line 294 of file expr.cpp.

◆ visit() [2/2]

void exprt::visit ( class const_expr_visitort visitor) const

Definition at line 312 of file expr.cpp.


The documentation for this class was generated from the following files: