我正在开发一个项目,我想开发一些静态源代码分析工具。源代码将采用多种专有语言,彼此交互。因此,我正在寻找一个定义抽象模型/ AST的项目,并且可以对语言进行一些数据流分析,我可以将每种专有语言转换为模型,并能够分析数据流/树。
这样的项目是否存在?
答案 0 :(得分:2)
不是开源的,但设计和证明对于构建处理多个复杂语言的工具非常有用:DMS Software Reengineering Toolkit。
DMS包含强大的解析机制(能够处理difficult languages such as C++),它仅从语法描述中自动构建AST,以及支持构建符号表的库,以及各种控制和数据流分析。
OP必须提供他的专有语言的语法和语义描述,但我认为他期待这一点。如果他想对跨语言的流程进行建模,他将不得不组织他的流量分析,使各个语言兼容。 DMS使用统一的基础设施/数据结构来支持所有这些活动,即使对于不同的语言,这也会使这更容易。无论他发现什么样的框架,他都不应期望涉及多种语言的项目容易或快速。我们对DMS的意图是实现这一目标。
答案 1 :(得分:0)
我认为对象管理组(OMG)的知识发现元模型规范(KDM)就是您正在寻找的空间。 (见http://www.omg.org/spec/KDM/)。它是OMG架构驱动现代化(ADM)活动的一部分。 KDM已由ISO重新发布为ISO / IEC 19506:2012(E)。
从介绍:
本国际标准定义了一个代表现有软件资产,其关联和代码的元模型 操作环境,称为知识发现元模型(KDM)。
你可能不得不自己完成大部分繁重的工作,但至少提供了元模型。
答案 2 :(得分:0)
更多作为标记:如果您对语法细节不太感兴趣并且可以自由选择平台,那么您也可以分析VM的代码,例如.Net字节码。 有C#和F#以及C ++(/ CLI)和Visual Basic的编译器(当然大多数来自一家知名的大型软件公司:-)) 它们都编译成字节码程序,可以检查它们,例如通过Mono.Cecil等工具,可以构建控制流图等。