[Mono-dev] GSoC - AST Verifier for C# compiler
mkrueger at xamarin.com
Thu Mar 29 08:09:04 UTC 2012
I would like to have whitespaces (and EOL as other special node) in the
ast as well as non compileable stuff as maybe TextNode, but that kills
performance even more. Doing pre processor directives and comments with
the specials bag and inserting them afterwards slows done the parse
process much. But they are semantically required (XmlDocs, #define etc.)
- and they are included in the AST, therefore it's all done on this
side. (Except there is some kind of comment/pre processor directive
Would be easier if we had a lexer that was build for generating such AST
(btw. I think it may be possible to do it and use mcs as parser, but
that's another story).
Doing that for whitespaces isn't worth it atm - to have all information
about a file you need the CompilationUnit AND the text. It's possible to
get the whitespace information (that's the space between two nodes.
GetTextBetween (curNode.EndLocation, curNode.NextNode.StartLocation)
gives you that. (And lastNode.EndLocation - document.EndLocation is the
unparseable text). That is the major difference between us and rolyn,
but not a major drawback IMO the original text is always available.
The NRefactory version of mcs has some patches to make such thing as
NRefactory possible. We try to keep the change set low, but #1 prio is
that it works for monodevelop features.
> some more questions:
> I see that NRefactory doesn't deal with whitespace at all and
> processes comments and preprocessor directives using SpecialsBag
> that's not present in Mono.CSharp.
> Can I ignore whitespace too? And does that mean I have to add (or copy
> from NRefactory) support for comments and preprocessor directives to
> the AST?
> Petr Onderka
More information about the Mono-devel-list