C#解析器
哪些解析器可用于解析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。