CBMC
|
String support via creating string constraints and progressively instantiating the universal constraints as needed. More...
#include <util/union_find_replace.h>
#include <solvers/refinement/bv_refinement.h>
#include "string_constraint_generator.h"
#include "string_dependencies.h"
#include "string_refinement_util.h"
Go to the source code of this file.
Classes | |
class | string_refinementt |
struct | string_refinementt::configt |
struct | string_refinementt::infot |
string_refinementt constructor arguments More... | |
Macros | |
#define | OPT_STRING_REFINEMENT |
#define | HELP_STRING_REFINEMENT |
#define | OPT_STRING_REFINEMENT_CBMC |
#define | HELP_STRING_REFINEMENT_CBMC |
#define | DEFAULT_MAX_NB_REFINEMENT std::numeric_limits<size_t>::max() |
Functions | |
exprt | substitute_array_lists (exprt expr, std::size_t string_max_length) |
union_find_replacet | string_identifiers_resolution_from_equations (const std::vector< equal_exprt > &equations, const namespacet &ns, messaget::mstreamt &stream) |
Symbol resolution for expressions of type string typet. More... | |
exprt | substitute_array_access (exprt expr, symbol_generatort &symbol_generator, const bool left_propagate) |
Create an equivalent expression where array accesses and 'with' expressions are replaced by 'if' expressions, in particular: More... | |
String support via creating string constraints and progressively instantiating the universal constraints as needed.
The procedure is described in the PASS paper at HVC'13: "PASS: String Solving with Parameterized Array and Interval Automaton" by Guodong Li and Indradeep Ghosh
Definition in file string_refinement.h.
#define DEFAULT_MAX_NB_REFINEMENT std::numeric_limits<size_t>::max() |
Definition at line 61 of file string_refinement.h.
#define HELP_STRING_REFINEMENT |
Definition at line 38 of file string_refinement.h.
#define HELP_STRING_REFINEMENT_CBMC |
Definition at line 57 of file string_refinement.h.
#define OPT_STRING_REFINEMENT |
Definition at line 31 of file string_refinement.h.
#define OPT_STRING_REFINEMENT_CBMC |
Definition at line 53 of file string_refinement.h.
union_find_replacet string_identifiers_resolution_from_equations | ( | const std::vector< equal_exprt > & | equations, |
const namespacet & | ns, | ||
messaget::mstreamt & | stream | ||
) |
Symbol resolution for expressions of type string typet.
We record equality between these expressions in the output if one of the function calls depends on them.
equations | list of equations |
ns | namespace |
stream | output stream |
Definition at line 470 of file string_refinement.cpp.
exprt substitute_array_access | ( | exprt | expr, |
symbol_generatort & | symbol_generator, | ||
const bool | left_propagate | ||
) |
Create an equivalent expression where array accesses and 'with' expressions are replaced by 'if' expressions, in particular:
arr[index]
, where: arr := {12, 24, 48}
the constructed expression will be: index==0 ? 12 : index==1 ? 24 : 48
arr[index]
, where: arr := array_of(12) with {0:=24} with {2:=42}
the constructed expression will be: index==0 ? 24 : index==2 ? 42 : 12
(g1?arr1:arr2)[x]
where arr1 := {12}
and arr2 := {34}
, the constructed expression will be: g1 ? 12 : 34
{ }[x]
returns a fresh symbol, this corresponds to a non-deterministic result Note that if left_propagate is set to true, the with
case will result in something like: index <= 0 ? 24 : index <= 2 ? 42 : 12
expr | an expression containing array accesses |
symbol_generator | a symbol generator |
left_propagate | should values be propagated to the left in with expressions |
Definition at line 1281 of file string_refinement.cpp.