最近一直在做 Python 源代码的静态分析。我们组已经有一个用 Ocaml 编写的用于 CIL(C Intermediate Language) 的静态分析器。我们想重用这个分析器,所以我们理想的方法是将 Python 翻译成 CIL。
目前,我使用 Python 内置的 ast 模块将 Python 解析为 Python AST。然后我将 ast.dump 打印的 Python AST 翻译成 C AST。考虑到 C AST 到 CIL API 和静态分析器都是用 Ocaml 编写的。我选择 Ocamllex&Ocamlyacc 将 Python AST 解析为 C AST。但是,也存在一些大问题。
ast.dump 打印的 AST 表示很难识别。这使我的解析器不容易实现。另一方面,我不能使用 Ocaml 来访问 Python ast 内部结构。即使我可以,数据结构也与 Ocaml 不同。
我想知道我最初是否选择了将 Python 代码转换为 C AST 的错误方法?是否有任何其他现有的工具或方法可以满足我的要求?
如果有什么我想念的,请指出这对我有很大帮助。谢谢。