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