从Python到CIL(C中间语言)的翻译



我最近一直在研究Python源代码的静态分析。在我们的小组中已经有一个用Ocaml为CIL(C中间语言)编写的静态分析器。我们希望重用这个分析器,所以我们理想的方法是将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的翻译?是否有其他现有的工具或方法可以满足我的需求?

如果有什么我遗漏的,请指出来,这将对我有很大帮助。谢谢。

我认为这不会很好。CIL本质上就是C语言。为了使你的技巧有效,你必须将Python 完全转换为C…但是两种语言的概念非常不同。如何为Python对象建模?延续?动态负载?运行时类型?无限精度算术?我认为你的问题不在于AST;相反,它们是概念性的。

如果可以转换为CIL,那么现在就有新问题了。当分析程序需要查找的构造容易被检测到时,构建分析程序就更容易了。一旦将continuation转换为C语言,推理与continuation的交互将变得困难,因为它们不容易识别。

我想我会把精力花在构建一个Python静态分析器上,让Python的概念易于检测。

最新更新