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

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

有帮助吗?

解决方案

适用于源代码:

组装工作:

程序集“解析”的问题是我们关于行和文件的信息较少(这些信息基于 .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。

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

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

您可以在 NDC 的这些视频中了解如何解决该问题:

不是在 C# 中,但我们可以使用构建完整 AST 的完整 C# 2/3/4 解析器 DMS 软件再造工具包.

DMS 提供了一个庞大的基础设施,用于解析、树构建、符号表构建和流分析、源到源转换以及从(修改后的)AST 重新生成源代码。(除了 C# 之外,它还可以处理许多其他语言。)

编辑(2013 年 9 月):这个答案最近没有更新。DMS 长期以来一直在处理 C# 5.0

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top