C#解析器

时间:2020-03-05 18:58:23  来源:igfitidea点击:

哪些解析器可用于解析Ccode?

我正在寻找可在Cand中使用的Cparser,它使我能够访问有关所分析代码的每个伪像的行和文件信息。

解决方案

回答

http://www.codeplex.com/csparser

回答

适用于源代码:

  • CSParser:从C#1.0到2.0,开源
  • Metaspec C#解析器:从C#1.0到3.0,商业产品(约5000美元)
  • #recognize !:从C#1.0到3.0,商业产品(大约900种)(SharpRecognize的回答)
  • SharpDevelop Parser(由Akselsson回答)
  • NRefactory:SharpDevelop中使用的C#1.0至4.0(+ async)开放源代码解析器。包括语义分析。
  • C#解析器和CodeDOM:完整的C#4.0解析器,已经支持C#5.0异步功能。商业产品(49美元至299美元)(肯贝克特的回答)
  • Microsoft Roslyn CTP:编译器即服务。

适用于组装:

  • 系统反射
  • Microsoft通用编译器基础结构:从C#1.0到3.0,Microsoft公共许可证。由Fxcop和Spec#使用
  • Mono.Cecil:从C#1.0到3.0,开源

程序集"解析"的问题在于,有关行和文件的信息较少(该信息基于.pdb文件,而Pdb仅包含方法的行信息)

我个人推荐Mono.Cecil和NRefactory。

回答

Mono(开源)包括Ccompiler(当然还有解析器)

回答

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

回答

考虑在构建的二进制文件上使用反射,而不是直接解析Ccode。反射API确实易于使用,也许我们可​​以获得所需的所有信息?

回答

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

回答

看看Gold Parser。它具有非常直观的IU,可让我们交互式地测试语法并生成Ccode。它提供了很多示例,并且它是完全免费的。

回答

我已经使用SharpDevelop AST API在OWASP O2平台项目上实现了我们所要的内容(C代码的AST解析)。

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

我们可以在此O2 XRule脚本文件ascx_View_SourceCode_AST.cs.o2上看到正在使用的该API。

例如,这是我们处理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的CAST解析器的第一步,而我仍然要了解它的工作原理):

  • AstDetails.cs
  • AstTreeView.cs
  • AstValue.cs
  • Ast_CSharp.cs

回答

DMS Software Reengineering Toolkit中没有使用C#,但是可以使用完整的C2 / 3/4解析器来构建完整的AST。

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

编辑(2013年9月):该答案最近未更新。 DMS已处理C5.0

回答

如果要将Cv3.5编译为.net程序集,请执行以下操作:

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

http://msdn.microsoft.com/zh-CN/library/microsoft.csharp.csharpcodeprovider.aspx

回答

如果我们熟悉ANTLR,则可以使用Antlr Cgrammar。

回答

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

它的速度非常快,语法已经存在。

语法本身是以BNF之类的方式直接在cin中编写的(某些运算符重载实现)

最好的是,"语法"直接产生AST。