是否存在任何用于抽象静态分析的开源 .NET (C#/F#) 库?目前我对常数传播算法感兴趣。
它应该是抽象的(独立于语言)和开源的,因为我想将它用作自定义算法实现的基础。
谢谢。
是否存在任何用于抽象静态分析的开源 .NET (C#/F#) 库?目前我对常数传播算法感兴趣。
它应该是抽象的(独立于语言)和开源的,因为我想将它用作自定义算法实现的基础。
谢谢。
Mono.Cecil库几乎就是您想要的。它是开源的、语言抽象的,并且作为奖励,它是超级抛光、快速和稳定的。
但这并不是您想要的,因为 Cecil 不分析 C#、VB.NET 或 F# 源代码,但它分析程序集文件(dll 和 exe)和程序集中包含的 IL 代码。对于许多静态分析领域来说就足够了,但是对于常量传播(我猜你的意思是像const string STR = "MyString";
or一样的字面常量const int INT = 12345;
),在编译时会丢失信息,因为常量值是硬编码的,而不是常量用法。Cecil 也不适合抽象语法树分析。
您还可以查看Microsoft Roslyn。与 Cecil 不同的是,Roslyn 解析 C# 和 VB.NET 源代码,非常适合抽象语法树分析,但它不是开源的,不支持 F#,并且在成为 RTM 之前肯定会发生变化,我会说明年使用 Visual Studio 2014,(但这只是我的猜测)。
您应该看看 Common Compiler Infrastructure: Code and AST components project。它提供了一个对象模型,用于以独立于语言的形式对 .NET 程序集进行静态分析。
更新
CCI 项目更多地被设计为编译器和工具作者的库,而不是开箱即用的使用。
也许您正在寻找更像Mono.Gendarme的东西,它是一个开源静态分析引擎,类似于 FxCop。它作为Mono-Tools项目集合的一部分进行维护。