C#的解析器

时间:2008-09-17 09:18:14

标签: c# parsing

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

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

15 个答案:

答案 0 :(得分:116)

适用于源代码:

适合汇编:

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

我个人推荐 Mono.Cecil NRefactory

答案 1 :(得分:7)

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

答案 2 :(得分: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

答案 3 :(得分:5)

如果您熟悉ANTLR,可以使用Antlr C# grammar

答案 4 :(得分:4)

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

为了更容易使用,我编写了一个快速API,它公开了许多关键源代码元素(使用语句,类型,方法,属性,字段,注释),并能够将原始C#代码重写为C#并进入VBNET。

您可以在此O2 XRule脚本文件中查看此API:ascx_View_SourceCode_AST.cs.o2

例如,这是您处理C#源代码文本并填充多个TreeViews&amp;文本框:

    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解析器,我仍然了解它是如何工作的):

答案 5 :(得分:3)

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

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

答案 6 :(得分:2)

答案 7 :(得分:2)

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

答案 8 :(得分:2)

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

答案 9 :(得分:2)

看看Gold Parser。它有一个非常直观的IU,可以让您以交互方式测试语法并生成C#代码。它有很多可用的例子,完全免费。

答案 10 :(得分:2)

也许你可以在irony.codeplex.com上尝试使用Irony。

它非常快,并且已经存在c#语法。

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

最好的是“语法”直接产生AST。

答案 11 :(得分:2)

你应该查看Roslyn,因为MS刚刚用Apache 2许可证here打开(或将很快打开)代码。您还可以使用GitHub中的代码查看解析此信息的方法。

答案 12 :(得分:1)

不在C#中,但我们的DMS Software Reengineering Toolkit提供了构建完整AST的完整C#2/3/4解析器。

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

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

答案 13 :(得分:1)

正在获得动力且非常适合这项工作的事情是Nemerle

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

答案 14 :(得分:-1)

如果您愿意编写自己的解析器(这很有趣),那么

GPPG可能会有用。