|
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"
Include dependency graph for string_refinement.h:
This graph shows which files directly or indirectly include this file: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. | |
| 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: | |
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.
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 : 48arr[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.