【发布时间】:2021-06-16 17:22:00
【问题描述】:
程序接收到一个映射vars,它映射pathCons 中变量的名称和类型。现在,我想解决这个path_cons,我设计了下面的parse()函数来尝试实现它。
但是,要让solver 识别path_cons 中的所有变量,我必须先声明它们。但是他们的名字被记录到一个变量中,那么我该如何实现我的目标呢?
def parse(vars, pathCons):
for var in list(vars.keys()):
if vars[var] == "uint":
???(should be name of var) = BitVec(var, 256)
elif vars[x] == "bool":
??? = Bool(var)
solver.add(eval(path_cons))
我想到了一个想法,我为每个变量随机生成一个唯一的名称,然后将它们替换为path_cons 中的新名称。但同样,生成的名称也是一个值,不能作为变量的名称。
例如,
vars = {"length":"int", "balance":"uint", "day":"uint", "flag":"bool"}
pathcons = "length>9, ULT(day, 10), UGE(balance + day, 100), flag == true"
现在我收到这两个变量,我想解决pathcons。
【问题讨论】:
-
“变量变量”的规范等价物是
dict或list用于命名或枚举变量。同样,eval可以直接将dict用于全局/本地。你有什么理由在实际的本地命名空间中尝试eval? -
@MisterMiyagi 据我所知,eval 中的
dict是为evalstr 中的变量赋予初始值。但是 z3 求解器仍然需要变量声明。
标签: python-3.x z3 solver