What is going on in language part land

Jakob Petsovits jpetso at gmx.at
Sat Aug 5 12:01:23 UTC 2006


On Friday, 4. August 2006 19:00, Adam Treat wrote:
> Hi All,
>
> I just wanted to layout a summary of discussions that are going on with the
> parsers.  Roberto was recently in the #kdevelop IRC channel and a number of
> us have been talking via email about how to proceed with the various
> parsers.
>
> The current situation:
> 1. kdevelop-pg generated C# and Java parsers that do not have a codemodel.
> 2. Hand written C++ parser that does have a codemodel, but one that is
> lacking.
>
> Because of the difficulty in coding a codemodel for every language parser
> by hand, the thought was to see if kdevelop-pg could be amended to generate
> them.

For reference, I'm currently working on a generator (about halfway done) that 
produces codemodels like the current C++ one. I decided to get an exact 
replication of the C++ codemodel, because I've got no idea how the improved 
one should look like. But once it's there, we can easily change it to fit our 
new needs. (Like, referencing the AST instead of storing stuff by itself.)

> Roberto has discussed this in a number of ways.  I think the summary is
> that a codemodel is used in addition to the AST for three reasons:
>
> 1.  Performance and memory usage.  The AST can be resource hungry and
> memory intensive.
> 2.  The AST does not contain *scope* and *type* information.  The codemodel
> does.
> 3.  The codemodel's API makes more sense to developers and can be easier to
> use and manipulate.
>
> I made a suggestion that perhaps storing the AST *wouldn't* be such a huge
> burden in terms of memory.  If this is so, then perhaps it makes sense to
> put aside #1 and see what we can do about #2 and #3.
>
> #2. is the real bear to me.  I don't know what would be involved with
> modifying kdevelop-pg to include scope and type information.  I also don't
> know how it would affect the DUChain that Hamish has been working on.

I guess it would be possible to modify kdevelop-pg for including scope and 
type information, but I would like a more detailed definition of what that 
information essentially is.

For scopes, I could imagine that it should be possible to access the parent 
scope from any (deeply nested) AST member further below. Maybe with the
scope AST items containing an additional compulsory "name" field and a list of 
child scopes. Would that be it?

For type information, I have no idea what's needed in addition to what's 
already in the AST. Well, a toString() method maybe, and an equality 
operator. What would you define as "type information"?

> #3. is also a bit of a mystery.  Perhaps we can write some convenience
> functions that would abstract the esoteric parts of the AST, but still use
> the AST as the datastore, rather than copying that information into another
> structure like we do with the codemodel.

Agreed.

> Anyway, if we _can_ solve these problems then I think we should.  Hand
> coding a codemodel for each language part just increases the amount of work
> for an already beleagued group of maintainers.

Even the current codemodel is a big pile of code monkey work.
The way it looks now, it seems that one codemodel definition file (for my new 
codemodel generator) with a little more than 300 lines can nearly exactly 
generate the existing C++ codemodel with 3 files of 700, 900 and 80 LOC 
(approximately). That seems like an improvement even if we wouldn't change 
all the codemodel stuff.

> Another thing that I want to keep an eye on is Roberto's suggestion that we
> should think about writing a C++ grammar file for kdevelop-pg.  If all of
> the parsers, including C++, could be using the same generator, well that'd
> be a real boon.
>
> However, we have no volunteers for this and it would likely be a difficult
> task.  Roberto seems to think that kdevelop-pg is in a state that could
> handle it though.  It is good to keep in mind.

Hm, ...let's see:
* We have a pre-processor and a lexer, neither of which needs to be replaced
* We have a parser that uses just the same paradigms and solutions that
  kdevelop-pg also uses (er, ...why is that? ;)
* The parser is complete, works, and just needs to be transcribed from
  manually-written C++ to its kdevelop-pg representation.

I mean, it can't be _that_ hard, right?
Seems like it's important enough to try it out.
(Should I do it soon? What about completing my SoC project first?)

The question is rather:
"Do we want kdevelop-pg to produce camel-cased code
instead of c_style_underlines?"
Otherwise the parser will look a lot more ugly than before ;)

Have a great time,
  Jakob




More information about the KDevelop-devel mailing list