我最近在Python源代码上进行了静态分析.
我们小组中已经有用Ocaml编写的CIL(C中间语言)静态分析器.我们要重用此分析器,因此我们的理想方法是将Python转换为CIL.
当前,我使用Python内置的ast模块将Python解析为Python AST.然后,我将ast.dump打印的Python AST转换为C AST.考虑到C AST to 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,那么现在您将遇到一个新问题.当容易找到需要查找的结构时,分析器更易于构建.一旦将延续翻译为C,就很难对与延续的交互进行推理,因为它们不容易识别.
我想我会花精力尝试构建易于检测Python概念的Python静态分析器.