Which parsers are available for parsing C# code?

C#Parsing

C# Problem Overview


Which parsers are available for parsing C# code?

I'm looking for a C# parser that can be used in C# and give me access to line and file informations about each artefact of the analysed code.

C# Solutions


Solution 1 - C#

Works on source code:

Works on assembly:

The problem with assembly "parsing" is that we have less informations about line and file (the informations is based on .pdb file, and Pdb contains lines informations only for methods)

I personnaly recommend Mono.Cecil and NRefactory.

Solution 2 - C#

Mono (open source) includes C# compiler (and of course parser)

Solution 3 - C#

If you are going to compile C# v3.5 to .net assemblies:

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

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

Solution 4 - C#

If you're familiar with ANTLR, you can use http://antlrcsharp.codeplex.com/">Antlr C# grammar.

Solution 5 - C#

I've implemented just what you are asking (AST Parsing of C# code) at the OWASP O2 Platform project using SharpDevelop AST APIs.

In order to make it easier to consume I wrote a quick API that exposes a number of key source code elements (using statements, types, methods, properties, fields, comments) and is able to rewrite the original C# code into C# and into VBNET.

You can see this API in action on this O2 XRule script file: ascx_View_SourceCode_AST.cs.o2 .

For example this is how you process a C# source code text and populate a number of 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");								
	}

The example on ascx_View_SourceCode_AST.cs.o2 also shows how you can then use the information gathered from the AST to select on the source code a type, method, comment, etc..

For reference here is the API code that wrote (note that this is my first pass at using SharpDevelop's C# AST parser, and I am still getting my head around how it works):

Solution 6 - C#

We have recently released a C# parser that handles all C# 4.0 features plus the new async feature: [C# Parser and CodeDOM][1]

This library generates a semantic object model which retains comments and formatting information and can be modified and saved. It also supports the use of LINQ queries to analyze source code.

[1]: http://www.inevitablesoftware.com/Products.aspx "C# Parser and CodeDOM"

Solution 7 - C#

You should definitely check out Roslyn since MS just opened (or will soon open) the code with an Apache 2 license here. You can also check out a way to parse this info with this code from GitHub.

Solution 8 - C#

Solution 9 - C#

SharpDevelop, an open source IDE, comes with a visitor-based code parser which works really well. It can be used independently of the IDE.

Solution 10 - C#

Consider to use reflection on a built binary instead of parsing the C# code directly. The reflection API is really easy to use and perhaps you can get all the information you need?

Solution 11 - C#

Have a look at Gold Parser. It has a very intuitive IU that lets you interactively test your grammar and generate C# code. There are plenty of examples available with it and it is completely free.

Solution 12 - C#

Maybe you could try with Irony on irony.codeplex.com.

It's very fast and a c# grammar already exists.

The grammar itself is written directly in c# in a BNF like way (acheived with some operators overloads)

The best thing with it is that the "grammar" produces the AST directly.

Solution 13 - C#

Not in C#, but a full C# 2/3/4 parser that builds full ASTs is available with our http://www.semanticdesigns.com/Products/DMS/DMSToolkit.html">DMS Software Reengineering Toolkit.

DMS provides a vast infrastructure for parsing, tree building, construction of symbol tables and flow analyses, source-to-source transformation, and regeneration of source code from the (modified) ASTs. (It also handles many other languages than just C#.)

EDIT (September) 2013: This answer hasn't been updated recently. DMS has long handled C# 5.0

Solution 14 - C#

Something that is gaining momentum and very appropriate for the job is Nemerle

you can see how it could solve it in these videos from NDC :

Solution 15 - C#

GPPG might be of use, if you are willing to write your own parser (which is fun).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJulien HoarauView Question on Stackoverflow
Solution 1 - C#Julien HoarauView Answer on Stackoverflow
Solution 2 - C#akuView Answer on Stackoverflow
Solution 3 - C#zproxyView Answer on Stackoverflow
Solution 4 - C#prosseekView Answer on Stackoverflow
Solution 5 - C#Dinis CruzView Answer on Stackoverflow
Solution 6 - C#Ken BeckettView Answer on Stackoverflow
Solution 7 - C#JasonView Answer on Stackoverflow
Solution 8 - C#GalwegianView Answer on Stackoverflow
Solution 9 - C#AkselssonView Answer on Stackoverflow
Solution 10 - C#HallgrimView Answer on Stackoverflow
Solution 11 - C#sbeskurView Answer on Stackoverflow
Solution 12 - C#SeeSoftView Answer on Stackoverflow
Solution 13 - C#Ira BaxterView Answer on Stackoverflow
Solution 14 - C#StéphaneView Answer on Stackoverflow
Solution 15 - C#leppieView Answer on Stackoverflow