哪些解析器可用于解析C#代码?
我正在寻找一个可以在C#中使用的C#解析器,让我可以访问有关所分析代码的每个人工制品的行和文件信息。
答案 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)
答案 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可能会有用。