it-swarm.cn

C#的解析器

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

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

99
Julien Hoarau

适用于源代码:

关于大会的工作:

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

我个人推荐 Mono.Cecil NRefactory

116
Julien Hoarau

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

7
aku

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

6
zproxy

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

5
prosseek

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

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

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

例如,这是您处理C#源代码文本并填充许多TreeViews和TextBoxes的方式:

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

4
Dinis Cruz

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

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

3
Ken Beckett
2
Galwegian

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

2
Akselsson

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

2
Hallgrim

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

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

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

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

2
SeeSoft

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

2
sbeskur

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

2
Jason

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

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

1
Stéphane

不是在C#中,而是使用我们的 DMS软件重新设计工具包 可以获得构建完整AST的完整C#2/3/4解析器。

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

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

1
Ira Baxter