我最近在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内部结构。即使我可以,数据结构也不同于Ocaml。
我想知道我是否首先选择了从Python代码到C AST的转换方法? 是否有其他现有工具或方法可以满足我的要求?
如果有什么我想念的,请指出对我来说会有很多帮助。 感谢。
答案 0 :(得分:3)
我认为这不会很好。 CIL基本上只是C语言。为了你的诀窍,你已经将Python 完全翻译成了C ......但是langauges有着非常不同的概念。你将如何建模Python对象?延续?动态负载?运行时输入?无限精度算术?我认为你的问题不是AST;相反,它们是概念性的
如果您可以转换为CIL,那么您现在遇到了一个新问题。当需要查找的构造很容易被检测到时,分析器更容易构建。一旦你将继续翻译成C,关于与延续的交互的推理将很难,因为它们不容易识别。
我想我会花费精力尝试构建一个易于检测Python概念的Python静态分析器。