[cfe-dev] clang leveraging Elsa?

Benjamin Meyer ben at meyerhome.net
Fri Oct 5 17:34:30 PDT 2007


On Oct 4, 2007, at 8:32 AM, Chris Lattner wrote:

> On Oct 3, 2007, at 12:49 PM, Benjamin Meyer wrote:
>
>> The past few months I have been writing many tools with Roberto
>> Raggi's c++ preprocessor and parser.  It is very fast and I have
>> enjoyed messing with it.  As you (chris) already know exactly what
>> you guys need/want and what would make a good parser I am very
>> curious what you can say about it  (where it is good/bad, what it is
>> missing etc)
>>
>> The one I have been using can be found in this package:
>>
>> ftp://ftp.trolltech.com/qtjambi/source/qtjambi-gpl- 
>> src-4.3.0_01.tar.gz
>>
>> Located in: generator/parser/ and the preprocessor is in generator/
>> parser/rpp
>
> It is somewhat irritating to me that there is almost no comments  
> for this: it seems well thought out and written. Is there any out  
> of line documentation available?

Asking around there doesn't seem to be any that I could find.  Sorry :(

> Overall, it is an impressive piece of work.  There are some minor  
> strange (to me) design decisions: for example, what is  
> ConditionAST, why does it exist?

Sorry I am not that familiar with the design choice, I have forwarded  
this to Roberto who will hopefully respond shortly with answers to it  
and the other ones below.

> The ASTs produced seem to be a bit heavier-weight than the clang  
> ASTs, and relies on the entire lexed token stream being available  
> to interpret the location info.  However, in my first few minutes  
> looking at it, I don't think that it shares the "fatal flaws" (from  
> the clang perspective only, obviously) in its design or  
> implementation that elsa has.  As a matter of fact, while the  
> details differ significantly, its design is somewhat similar to  
> clangs, validating clang's design ;-).  One thing that is  
> impossible for me to do from inspection is to determine how  
> complete the parser is.
>
> Since I don't have it built and you do, here are some questions for  
> you: :)

Having it sitting in the middle of other packages is getting  
annoying.  I have pulled it out and made a quick (and very dirty)  
example app that can be used to generate preprocessed files (./ 
example -E file) put it in a git depot and put it up online

http://repo.or.cz/w/rpp.git


> 1) looking at the preprocessor, the implementation doesn't look  
> particularly speedy.  It is using std::strings to push text  
> around.  Have you timed the preprocessor on large inputs to see how  
> fast it really is?

Did a quick (not scientific) test against gcc on my macbook it is  
almost twice the speed

g++
real    0m0.437s
user    0m0.243s
sys     0m0.060s

rpp
real    0m0.248s
user    0m0.197s
sys     0m0.070s

> 5) it looks like a lot of semantic checks are missing.  Is there  
> anything that talks about the current state of the parser?  It also  
> reads and ignores lots of stuff, even simple things like break/ 
> continue/goto stmts.

I know that there are several groups (kdevelop is one group) who wish  
to use it to parse c++ code beyond Qt so it will be maintained and  
improved.  I don't know their plans though.  Sorry I can't be more help.

-Benjamin Meyer



More information about the cfe-dev mailing list