Click here to Skip to main content
13,346,895 members (24,415 online)
Click here to Skip to main content
Add your own
alternative version


69 bookmarked
Posted 27 Jun 2002

C# CodeDOM parser

, 27 Jun 2002
Rate this:
Please Sign up or sign in to vote.
This is a utility which parses C# source code and creates the CODEDOM tree of the code.


CS CODEDOM Parser is utility which parses the C# source code and creates the CODEDOM tree of the code (general classes that represent code, part of .NET Framework - namespace System.CodeDom) .

Current version (0.1) is limited - it parses code down to type members and their parameters, it has very limited support for expressions and it does not parse the statements inside members. There are two main reasons for why I stayed at this level now

  • First - It was enough for my needs (I wanted to do some code analysis to enforce coding standards)
  • Second - CODEDOM is limited and cannot express fully the C# code - for more details see section CODEDOM Limitations below.

On the other hand it also parses source code comments, so it can be used to analyze the interdependencies of code and comments.

Also the stability of this version is low - it's kind of alpha version. If anybody wants to help get this thing further he is welcomed.

The parser is based on Mono - CSharp Compiler code. I was looking around little bit around for available C# parser and C# parser building tools (I wanted C# parser in C#) and finally decided for Mono. For more details about exploitation of Mono parser and other possibilities I explored see section C# parser Tools.

CODEDOM Limitations

At first I thought it is great idea to use language independent syntax tree and CodeDom looks nice. If some code analysis tool is build on it, it can work for any .NET language. Just need to change parser and rest is the same, sounds cool. But, after I've got into the CodeDom, I have found that a lot of language features (and not just C#, basically for any language) is missing and it is not possible to parse the source code fully. The main problem is in expressions and statements, where CodeDom has very limited set of classes - there is for instance no support for unary operation and more more issues.

I decided to continue with CodeDom, even with its limitations, because it was enough for purposes of analyzing code for coding standards (at least what I need now - it also enables to keep comments and code in one tree, which is something I liked), but it is open issue for the future development.

Here is list of issues I've found (and there is more,):

  • CodeCompile unit does not have space for using directives or ns members, so they are placed now into first default NS
  • using_alias_directive - no support found
  • nested namespaces - no support found ( so parser is flattening ns hierarchy)
  • variable declaration list (int i,j,k;) - no support - transformed to individual var declarations
  • pointer_type - no support found
  • "jagged" array type (array of arrays) - MS CSharpCodeProvider reverses order of ranks
  • params keyword - not supported - param is omitted in parsing and param is then an ordinary array type param
  • private modifier on nested delegate is not shown by CSharpCodeProvider (all other nested types works fine)
  • unsafe modifier - no support found
  • readonly modifier - no support found
  • volatile modifier - no support found
  • explicit interface implementation - not implemented yet (I think this can be done)
  • add and remove accessors for Event - no support found
  • virtual and override modifiers do not work in MS CSharpCodeProvider for events
  • Operator members and Destructors - no support found
  • Expressions - no unary expressions(operations) at all !!!, only one dim arrays, some operators not supported and more
  • Attribute targets : no support found
  • Attributes on accessor : no support found
  • If CompileUnit contains custom attributes in global scope, CSSharpCodeProvider prints then before global using directives (it is due to that using has to be in the first ns)

C# Parser tools

I wanted to use some existing tool so I looked around and found this interesting stuff :

  • Mono project
    They are implementing a complete open source .NET platform (they modified jay parser generator and used it to generate the parser).
  • Compiler Writing Tools using C#, from Malcolm Crowe of the University of Paisley
    Mr.Crowe creates parser and lexer generator in C#. I was playing with these tools quite a bit, but when I wanted to do something bigger, I've got stuck.

  • C# grammar for flex/bison written by James Power of National University of Ireland
    Contains scripts for well-known tools bison and flex, which can generate C parser. I thought I can use then in some C# port of those tools, but I was not able, so finally used the grammar from Mono.

  • jb2csharp
    This is port of JB Parser and Lexer Generation for Java (which itself is port of bison and flex). But the current version is alpha and I was not able to make work even their calculator example (which authors claim it was working).

  • CsLex from Brad Merrill
    It is a lexer generator.

  • I've also looked at the MS Rotor project, the C# parser there is in C++ (and it is not Open Source license).

So finally I decided to use Mono source, I've used their lexer, jay and their jay grammar to generate my parser. It is the jay grammar I've use my code to create CodeDom objects.

Description of package

CS CODEDOM Parser package consist of :

  • CodeDom parser itself (/ directory)
  • NUnit tests for the parser (/NUnitTests directory)
    Contains bunch of tests, I've used to check functionality of the parser - if you want to run then you should have NUnit.
  • testParser (/testParser directory)
    Simple command line utility that tests the parser - it parses file (name supplied as cmd line parameter) and write to stdout the code, which is generated by CSharpCodeProvider (class in CodeDom).
  • CodeTreeView (/CodeTreeView directory)
    Simple windows application, which opens file and displays CODEDOM tree in left part (treeview control) and original source in right part (textbox control). When you click on tree node, textbox scrolls to show the code. It is something like very very simple source code viewer.


CS CODEDOM Parser and tools included in this package are distributed under the under GPL licence.

Latest Version

You can check for latest version on

The Future

The basic idea about future development is to extend CodeDom to support all language features, so the sources can be completely parsed. (Alternative is to leave CodeDom and have its own syntax tree, but I still like the idea of the independent language tree structure, which can be used in different tasks).

Reporting of errors and warnings should be improved (unify codes and messages, unify error reporting, Report class should store reported errors).

Also parser should be improved to indicate location of syntax elements more exactly in the source file.

Better separation between the parser and CODEDOM builder is also needed.

If somebody likes the tool and wants to help with its improvements, he is welcome.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Ivan Zderadièka
Czech Republic Czech Republic
No Biography provided

You may also be interested in...

Comments and Discussions

QuestionC# 4.0 Parser and CodeDOM Pin
KenBeckett20-Sep-11 9:15
memberKenBeckett20-Sep-11 9:15 
QuestionHow to Comment metods in an exisiting cs file? Pin
amar_panda739-Feb-11 18:48
memberamar_panda739-Feb-11 18:48 
GeneralTidy up Pin
Soliant25-Aug-08 14:48
memberSoliant25-Aug-08 14:48 
GeneralVisual BNF parser generator Pin
AdamSlosarski13-Mar-07 19:13
memberAdamSlosarski13-Mar-07 19:13 
QuestionC# 2.0 version Pin
abulka24-Oct-06 23:12
memberabulka24-Oct-06 23:12 
QuestionCodeDOM Sucks... Pin
Akash Kava13-Oct-06 19:16
memberAkash Kava13-Oct-06 19:16 
GeneralAsk a CodeDOM question Pin
leechdr10-Nov-04 14:58
sussleechdr10-Nov-04 14:58 
GeneralPre-processor directives error in the parser Pin
Anonymous23-Aug-04 10:43
sussAnonymous23-Aug-04 10:43 
It gives me error 1517 "Invalid Pre-processor directive" on the following line in my code,

#if (VAR1 && VAR2)
// do something

Now, if I put it in the following form it works fine:

#if VAR1
#if VAR2
//do something

Also, if I use something like :

#if (VAR)
//do something

it gives me error 1040 or 1024 but if I remove thr brackets it works fine i.e.

#if VAR
//do something

I wanted to know if this is a bug in the CODEDOM parser. Did anyone come across this earlier?
GeneralParser for Refactoring Purposes Pin
ghada elnahas8-Feb-04 12:06
memberghada elnahas8-Feb-04 12:06 
QuestionCodeDOM for any language? Pin
bouli23-Jan-04 4:12
memberbouli23-Jan-04 4:12 
GeneralGreat job, ignore the rash foolishness Pin
Anonymous18-Jul-03 17:37
sussAnonymous18-Jul-03 17:37 
GeneralThe framework already has a CodeDOM parser Pin
Wesner Moise4-Feb-03 8:13
memberWesner Moise4-Feb-03 8:13 
GeneralRe: The framework already has a CodeDOM parser Pin
leppie4-Feb-03 11:03
memberleppie4-Feb-03 11:03 
GeneralRe: The framework already has a CodeDOM parser Pin
Stoyan Damov9-Jun-03 0:39
memberStoyan Damov9-Jun-03 0:39 
GeneralRe: The framework already has a CodeDOM parser Pin
Shannon McCoy12-Jul-03 0:33
memberShannon McCoy12-Jul-03 0:33 
GeneralRe: The framework already has a CodeDOM parser Pin
jpansarasa14-Oct-04 16:20
memberjpansarasa14-Oct-04 16:20 
GeneralRe: Lots of Mistakes in this article Pin
Ivan Zderadièka12-Jan-03 23:31
memberIvan Zderadièka12-Jan-03 23:31 
GeneralLots of Mistakes in above post Pin
leppie4-Feb-03 11:19
memberleppie4-Feb-03 11:19 
GeneralRe: Lots of Mistakes in this article Pin
Ivan Zderadièka10-Feb-03 0:49
memberIvan Zderadièka10-Feb-03 0:49 
GeneralRe: Lots of Mistakes in this article Pin
Anonymous30-Mar-03 10:16
sussAnonymous30-Mar-03 10:16 
GeneralRe: Lots of Mistakes in this article Pin
Stoyan Damov9-Jun-03 0:53
memberStoyan Damov9-Jun-03 0:53 
GeneralDistribution Pin
Ben Kloosterman29-Dec-02 2:14
memberBen Kloosterman29-Dec-02 2:14 
GeneralRe: Distribution Pin
Ivan Zderadièka29-Dec-02 23:51
memberIvan Zderadièka29-Dec-02 23:51 
GeneralInteresting Idea Pin
krishnaswin15-Aug-02 10:42
memberkrishnaswin15-Aug-02 10:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.180111.1 | Last Updated 28 Jun 2002
Article Copyright 2002 by Ivan Zderadièka
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid