【发布时间】:2019-08-20 09:05:51
【问题描述】:
在我正在进行的项目中,我需要使用 Z3 C++ API 做两件事:
- 将 Z3_ast 导出到二进制缓冲区
- 如果 Z3_ast 内部包含符号声明,则搜索它。
我目前如何执行此操作:我将 Z3_ast 转换为字符串,然后在需要的地方再次加载它。搜索是通过字符串搜索完成的。 我认为有一种更有效的方法来处理这个问题。 python API 解决方案也会很有帮助,因为我可以跟踪实现它的 CPP 代码。
【问题讨论】:
-
答案归结为“遍历 AST”:编写一个递归过程,询问一个节点类型,然后遍历其子节点(如果有)。
-
是的,但我想了解这种 API 是否已经存在,或者我是否需要重新编译源代码并忍受代码分歧。
-
有一些访问器函数可以在 AST 节点上进行探查,但您必须自己编写 AST walk。 Z3 distribution 中有一个小示例可以帮助您入门。
标签: python c++ z3 symbolic-math