如何使用 cpp 将 z3 表达式转换为字符串
How to convert and z3 expression to string using cpp?
我正在尝试创建一个映射到我的表达式变量和具有随机整数值的表达式常量。
这是表达式:((x || !z) && (y || !z))
其中 x y 和 z 是bool_const
表达式。
我创建了一个递归函数,它能够遍历表达式中的每个元素。但是在映射函数中,我必须给出一个整数和一个字符串作为输入。
map<int,string> symbols;
void walk(expr e)
{
if(e.is_const())
{
std::cout <<"ARGUMENT: " << e<< endl;
int ran_num = (rand() % 10) + 1;
symbols.insert(pair<int,string>(ran_num,e.to_string));
}
else
{
cout <<"APP: " << e.decl().name() << endl;
for(int i = 0; i < e.num_args(); i++)
{ int ran_num = (rand() % 10) + 1;
symbols.insert(pair<int,string>(ran_num,e.decl().name()));
walk(e.arg(i));
}
}
}
这里出现问题
symbols.insert(pair<int,string>(ran_num,e.to_string)
其中e.to_string
无法解释为字符串
和
symbols.insert(pair<int,string>(ran_num,e.decl().name()))
也无法将e.decl().name()
部分解释为 STRING。
如何将它们转换为字符串以满足我的映射函数?
正如编译器告诉你的,name
不是一个string
,它是一个symbol
,定义在这里:https://z3prover.github.io/api/html/classz3_1_1symbol.html
如果你想把它变成一个字符串,它确实提供了一个str
的方法;所以你应该说e.decl().name().str()
。
但在进入细节之前,您应该首先查看表示 Z3 表达式的类层次结构。从这里开始: https://z3prover.github.io/api/html/classz3_1_1expr.html
相关文章:
- wcstombs_s(),转换字符串的长度
- 使用 CStringW/CStringA 和 CT2W/CT2A 转换字符串有什么区别?
- 无法转换字符串插入函数的参数
- 转换字符串向量:基于先前的值跳过元素
- 从中间器转换字符串不起作用,出了什么问题?
- 失败的证明转换字符串到枚举类
- 如何使用正则表达式和提升转换迭代器标记和转换 c 字符串
- 使用java jni时转换字符串类型
- 如何避免在转换字符串令牌流时重复istringstream构造
- 阿托伊未正确转换字符串
- C++,转换字符串,使连续下划线序列变为单个下划线
- 使用长算术转换字符串
- 转换字符串十进制数时的精度
- 将词法转换字符串提升为双精度
- 使用marshal_as函数转换字符串的性能
- C++不会从数据转换字符串
- 无论如何,在c++ /Qt中转换字符串到结构中的字段
- C++ 隐式类型转换字符串 -> int?
- 转换字符串到浮点数,c++实现
- 用于转换字符串大小写的函数