是否存在用于抽象静态分析的开源.NET (C#/F#)库?目前我对常量传播算法很感兴趣。
它应该是抽象的(独立于语言的)和开源的,因为我想使用它作为自定义算法实现的基础。
谢谢。
发布于 2013-08-28 01:33:32
库Mono.Cecil几乎就是您想要的。它是开源的,语言抽象,作为一个额外的好处,它超级完美,快速和稳定。
但它并不完全是您想要的,因为Cecil不分析C#、VB.NET或F#源代码,但它分析程序集文件(dll和exe)和程序集中包含的IL代码。对于许多静态分析区域,这就足够了,但是对于常量传播(我猜您指的是文字常量,如const string STR = "MyString";或const int INT = 12345;),会在编译时丢失信息,因为常量值是硬编码的,而不是常量的用法。Cecil也不适用于Abstract Syntax Tree分析。
你也可以看看Microsoft Roslyn。与塞西尔相反,Roslyn解析C#和VB.NET源代码,非常适合Abstract Syntax Tree分析,但它不是开源的,不支持F#,并且在明年的Visual Studio2014中可能会发生变化(但这只是我的猜测)。
发布于 2013-08-30 07:24:15
您应该看看公共编译器基础设施:代码和AST组件project。它提供了一个对象模型,用于以独立于语言的形式对.NET程序集进行静态分析。
更新
CCI项目更多地被设计为编译器和工具作者的库,而不是开箱即用的库。
也许您正在寻找更像Mono.Gendarme的东西,它是一个类似于FxCop的开源静态分析引擎。它是作为Mono-Tools项目集合的一部分进行维护的。
https://stackoverflow.com/questions/18464278
复制相似问题