如何将 Z3_ast 导出为二进制文件以及如何在其中搜索函数名称?
How to export a Z3_ast to binary and how to search one for func names?
在我正在处理的项目中,我需要使用 Z3 C++ 做两件事 API:
- 将 Z3_ast 导出到二进制缓冲区
- 搜索 Z3_ast 是否包含符号声明。
我目前是怎么做的:我正在将 Z3_ast 转换为字符串,然后在我需要的地方再次加载它。搜索是通过字符串搜索完成的。
我认为有一种更有效的方法来处理这个问题。 python API 解决方案也会有所帮助,因为我可以跟踪实现它的 CPP 代码。
执行此操作的正确方法是遍历 AST 并挑选出节点。 Z3 API 提供了所有必要的识别器。请注意,将 AST 序列化为字符串并进行字符串搜索不仅速度慢,而且如果他们更改表面语法的表示方式,也很容易出错。
前段时间有一个类似的问题,你可能想看看那里的答案至少得到一个起点:How to use arg() function from z3?
在我正在处理的项目中,我需要使用 Z3 C++ 做两件事 API:
- 将 Z3_ast 导出到二进制缓冲区
- 搜索 Z3_ast 是否包含符号声明。
我目前是怎么做的:我正在将 Z3_ast 转换为字符串,然后在我需要的地方再次加载它。搜索是通过字符串搜索完成的。 我认为有一种更有效的方法来处理这个问题。 python API 解决方案也会有所帮助,因为我可以跟踪实现它的 CPP 代码。
执行此操作的正确方法是遍历 AST 并挑选出节点。 Z3 API 提供了所有必要的识别器。请注意,将 AST 序列化为字符串并进行字符串搜索不仅速度慢,而且如果他们更改表面语法的表示方式,也很容易出错。
前段时间有一个类似的问题,你可能想看看那里的答案至少得到一个起点:How to use arg() function from z3?