103

哪些解析器可用于解析 C# 代码?

我正在寻找一个可以在 C# 中使用的 C# 解析器,并让我可以访问有关所分析代码的每个工件的行和文件信息。

4

15 回答 15

119

适用于源代码:

组装工作:

程序集“解析”的问题在于我们对行和文件的信息较少(这些信息基于 .pdb 文件,而 Pdb 仅包含方法的行信息)

我个人推荐Mono.CecilNRefactory

于 2008-09-17T09:21:39.570 回答
7

Mono(开源)包括 C# 编译器(当然还有解析器)

于 2008-09-17T09:22:25.683 回答
6

如果要将 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

于 2010-03-09T11:38:23.843 回答
5

如果您熟悉 ANTLR,则可以使用Antlr C# 语法

于 2010-10-13T01:33:22.790 回答
4

我已经使用 SharpDevelop AST API在OWASP O2 平台项目中实现了您所要求的(C# 代码的 AST 解析) 。

为了更容易使用,我编写了一个快速 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 解析器,我仍在了解它是如何工作的):

于 2010-02-06T21:28:34.557 回答
3

我们最近发布了一个 C# 解析器,它可以处理所有 C# 4.0 特性以及新的异步特性: C# Parser 和 CodeDOM

该库生成一个语义对象模型,该模型保留注释和格式信息,并且可以修改和保存。它还支持使用 LINQ 查询来分析源代码。

于 2011-10-03T05:50:27.047 回答
3

您绝对应该查看 Roslyn,因为 MS 刚刚在此处打开(或即将打开)带有 Apache 2 许可证的代码。您还可以从GitHub查看使用此代码解析此信息的方法。

于 2014-04-15T02:38:52.977 回答
2

http://www.codeplex.com/csparser

于 2008-09-17T09:19:40.853 回答
2

SharpDevelop是一个开源 IDE,带有一个基于访问者的代码解析器,它运行得非常好。它可以独立于 IDE 使用。

于 2008-09-17T09:22:47.197 回答
2

考虑在构建的二进制文件上使用反射,而不是直接解析 C# 代码。反射 API 真的很容易使用,也许您可​​以获得您需要的所有信息?

于 2008-09-17T09:32:00.997 回答
2

看看黄金解析器。它有一个非常直观的 IU,可以让您交互式地测试您的语法并生成 C# 代码。它有很多可用的示例,而且它是完全免费的。

于 2008-10-23T19:20:47.493 回答
2

也许您可以在 irony.codeplex.com 上尝试 Irony。

它非常快,而且 ac# 语法已经存在。

语法本身是直接用 C# 以类似 BNF 的方式编写的(通过一些运算符重载实现)

最好的一点是“语法”直接生成 AST。

于 2010-12-30T09:39:40.637 回答
0

不是在 C# 中,而是在我们的DMS 软件再工程工具包中提供了一个完整的 C# 2/3/4 解析器,它构建了完整的 AST 。

DMS 为解析、树构建、符号表构建和流分析、源到源转换以及从(修改的)AST 重新生成源代码提供了庞大的基础设施。(它还处理许多其他语言,而不仅仅是 C#。)

编辑(九月)2013:这个答案最近没有更新。DMS 长期处理 C# 5.0

于 2010-03-09T11:21:29.253 回答
0

正在获得动力并且非常适合这项工作的东西是Nemerle

您可以在 NDC 的这些视频中看到它是如何解决它的:

于 2012-07-17T13:19:06.263 回答
-2

如果您愿意编写自己的解析器(这很有趣),GPPG可能会有用。

于 2008-10-09T06:26:05.177 回答