题
哪些解析器可用于解析 C# 代码?
我正在寻找一个可在 C# 中使用的 C# 解析器,它使我能够访问有关所分析代码的每个工件的行和文件信息。
解决方案
适用于源代码:
- 解析器:从C# 1.0到2.0,开源
- Metaspec C# 解析器:从C# 1.0到3.0,商业产品(约5000$)
- #认出!:从C# 1.0到3.0,商业产品(约900欧元)(回答者 敏锐识别)
- SharpDevelop解析器 (回答者: 阿克塞尔松)
- NRefactory:从 C# 1.0 到 4.0(+异步),SharpDevelop 中使用的开源解析器。包括语义分析。
- C# 解析器和 CodeDOM:一个完整的C# 4.0解析器,已经支持C# 5.0异步功能。商业产品(49 美元至 299 美元)(回答者 肯·贝克特)
- 微软罗斯林CTP:编译器即服务。
组装工作:
- 系统.反射
- 微软通用编译器基础设施:从 C# 1.0 到 3.0,微软公共许可证。使用者 福克斯科普 和 规格#
- 莫诺·塞西尔:从C# 1.0到3.0,开源
程序集“解析”的问题是我们关于行和文件的信息较少(这些信息基于 .pdb 文件,并且 Pdb 仅包含方法的行信息)
我个人推荐 莫诺·塞西尔 和 NRefactory.
其他提示
单核细胞增多症 (开源)包括 C# 编译器(当然还有解析器)
如果要将 C# v3.5 编译为 .net 程序集:
var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx
如果您熟悉 ANTLR,您可以使用 Antlr C# 语法.
我已经实现了您所要求的(C# 代码的 AST 解析) OWASP O2 平台 使用 SharpDevelop AST API 的项目。
为了更容易使用,我编写了一个快速 API,它公开了许多关键源代码元素(使用语句、类型、方法、属性、字段、注释),并且能够将原始 C# 代码重写为 C# 和 VBNET 。
您可以在此 O2 XRule 脚本文件上看到此 API 的运行情况: ascx_View_SourceCode_AST.cs.o2 .
例如,这是处理 C# 源代码文本并填充多个 TreeView 和 TextBox 的方式:
public void updateView(string sourceCode)
{
var ast = new Ast_CSharp(sourceCode);
ast_TreeView.show_Ast(ast);
types_TreeView.show_List(ast.astDetails.Types, "Text");
usingDeclarations_TreeView.show_List(ast.astDetails.UsingDeclarations,"Text");
methods_TreeView.show_List(ast.astDetails.Methods,"Text");
fields_TreeView.show_List(ast.astDetails.Fields,"Text");
properties_TreeView.show_List(ast.astDetails.Properties,"Text");
comments_TreeView.show_List(ast.astDetails.Comments,"Text");
rewritenCSharpCode_SourceCodeEditor.setDocumentContents(ast.astDetails.CSharpCode, ".cs");
rewritenVBNet_SourceCodeEditor.setDocumentContents(ast.astDetails.VBNetCode, ".vb");
}
上的例子 ascx_View_SourceCode_AST.cs.o2 还展示了如何使用从 AST 收集的信息在源代码上选择类型、方法、注释等。
作为参考,这里是编写的 API 代码(请注意,这是我第一次使用 SharpDevelop 的 C# AST 解析器,我仍在了解它是如何工作的):
我们最近发布了一个 C# 解析器,可以处理所有 C# 4.0 功能以及新的异步功能: C# 解析器和 CodeDOM
该库生成一个语义对象模型,该模型保留注释和格式信息,并且可以修改和保存。它还支持使用 LINQ 查询来分析源代码。
夏普开发, ,一个开源 IDE,带有一个基于访问者的代码解析器,运行得非常好。它可以独立于 IDE 使用。
考虑在构建的二进制文件上使用反射,而不是直接解析 C# 代码。反射API真的很容易使用,也许你可以得到你需要的所有信息?
看一下 黄金解析器. 。它有一个非常直观的 IU,可让您交互式地测试语法并生成 C# 代码。它有很多可用的示例,并且完全免费。
也许您可以在irony.codeplex.com 上尝试使用Irony。
它非常快并且 C# 语法已经存在。
语法本身是直接用 C# 以类似 BNF 的方式编写的(通过一些运算符重载实现)
它最好的一点是“语法”直接生成 AST。
正在获得动力并且非常适合这项工作的东西是 内梅尔勒
您可以在 NDC 的这些视频中了解如何解决该问题:
不是在 C# 中,但我们可以使用构建完整 AST 的完整 C# 2/3/4 解析器 DMS 软件再造工具包.
DMS 提供了一个庞大的基础设施,用于解析、树构建、符号表构建和流分析、源到源转换以及从(修改后的)AST 重新生成源代码。(除了 C# 之外,它还可以处理许多其他语言。)
编辑(2013 年 9 月):这个答案最近没有更新。DMS 长期以来一直在处理 C# 5.0
GPPG 如果您愿意编写自己的解析器(这很有趣),可能会有用。