开源静态代码分析模型

Open Source Static Code Analysis Models

我正在从事一个项目,我想在其中开发一些静态源代码分析工具。源代码将采用多种相互交互的专有语言。因此,我正在寻找一个定义抽象 Model/AST 并且可以对语言进行一些数据流分析的项目,我可以在其中将每种专有语言翻译成模型并能够分析数据 flow/tree。

有这样的项目吗?

我认为对象管理组 (OMG) 的知识发现元模型 (KDM) 规范符合您正在寻找的 space。 (参见 http://www.omg.org/spec/KDM/)。它是 OMG 的架构驱动现代化 (ADM) activity 的一部分。 KDM 已由 ISO 重新发布为 ISO/IEC 19506:2012(E).

来自简介:

This International Standard defines a meta-model for representing existing software assets, their associations, and operational environments, referred to as the Knowledge Discovery Meta-model (KDM).

您可能需要自己完成大部分繁重的工作,但至少已经提供了元模型。

不是开源的,但设计并证明对构建处理多种复杂语言的工具有用:我们的DMS Software Reengineering Toolkit

DMS 包含强大的解析机制(能够处理 difficult languages such as C++),仅从语法描述自动构建 AST,以及支持符号表构建以及各种控制和数据流分析的库。

OP 将不得不提供他的专有语言的语法和语义描述,但我认为他期望如此。如果他想对跨语言的流程进行建模,他将必须组织他的流程分析以使各个语言兼容。事实上,DMS 使用统一的 infrastructure/datastructures 来支持所有这些活动,即使是针对不同的语言,这将使这变得更容易。

无论他找到什么框架,他都不应该指望涉及多种语言的项目很容易或很快。我们使用 DMS 的目的是让它变得实用。

作为补充:如果您对语法细节不太感兴趣并且可以自由选择您的平台,您不妨分析 VM 的代码,例如 .Net 字节码。 有用于 C# 和 F# 以及 C++(/CLI) 和 Visual Basic 的编译器(当然大部分来自知名的大型软件公司 :-) ) 它们都编译成字节码程序,可以检查,例如通过像 Mono.Cecil 这样的工具,可以构建控制流图等