C#的解析器

Jul*_*rau 99 c# parsing

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

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

Jul*_*rau 116

适用于源代码:

适用于装配:

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

我个人推荐Mono.CecilNRefactory.


aku*_*aku 7

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


zpr*_*oxy 6

如果要将C#v3.5编译为.net程序集:

var cp = new Microsoft.CSharp.CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", "v3.5" } });
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider.aspx

  • 不,不要查看在公共构建中抛出NotImplemented异常的CodeDomProvider.Parse()方法!(Visual Studio使用专有的内部解析器). (3认同)

Din*_*ruz 5

我已经使用 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");                                
    }
Run Code Online (Sandbox Code Playgroud)

ascx_View_SourceCode_AST.cs.o2上的示例还展示了如何使用从 AST 收集的信息在源代码上选择类型、方法、注释等。

作为参考,这里是编写的 API 代码(请注意,这是我第一次使用 SharpDevelop 的 C# AST 解析器,我仍在了解它是如何工作的):


pro*_*eek 5

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