使用python api打印z3表达式

时间:2018-01-11 05:53:04

标签: python z3 z3py

我正在尝试使用z3来简化由S2E / KLEE

生成的一些表达式
from z3 import *

f = open("query.smt2").read()
expr = parse_smt2_string(f)

print(expr)
print(simplify(expr))

但它似乎只能记录200行。我也尝试将其写入文件,但结果相同。

g = open("simplified_query.smt2", 'w')
g.write(str(simplify(expr)))
g.close();

我应该如何记录整个表达式?

示例输入/输出:https://paste.ee/p/tRwxQ

1 个答案:

答案 0 :(得分:0)

您可以像使用Python漂亮的打印机一样打印表达式。如果它们变得非常大并且漂亮的打印机效率不高,它会切断表达式。您可以添加到漂亮的打印机以强制它打印完整的表达式。该函数名为set_pp_option,它在z3printer.py中定义。主要选项称为max_depth。其他选项在Formatter类中定义为字段。

您还可以使用“sexpr()”方法以SMT2格式打印表达式。

顺便说一下,你上传的文件没有处理,因为它是UTF8格式,但这与你的问题正交,可能是你上传repro的工件。