ivanZ | CS CODEDOM Parser | ||
Content
Contact:
|
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 parses the statements inside members. There are two main reasons, why I stayed now on this level now
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 LimitationsAt 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,):
C# Parser toolsI wanted to use some existing tool so I looked around and found this interesting stuff :
So finally I decided to use Mono source, I've used their lexer, jay and their jay grammar to generate my parser. It the jay grammar I've use my code to create CodeDom objects. Description of packageCS CODEDOM Parser package consist of :
LicenceCS CODEDOM Parser and tools included in this package are distributed under the under GPL licence. History25.10.2002 - new updated version available, contains fixes to some bugs, mainly:
DownloadYou can download source code here here. Debug binaries are also part of the package. You can check for latest version on http://www.sweb.cz/ivan.zderadicka/csparser.html. CS CodeDom Parser is also available at sourceforge.net, where you can get latest sources and also join the project as developers. Project page is at http://sourceforge.net/projects/cscodedomparser/. The FutureThe 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 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 welcomed.
|
||