c++ code completion status report
Richard Dale
Richard_Dale at tipitina.demon.co.uk
Fri Jan 4 16:16:02 UTC 2002
On Thursday 03 January 2002 9:52 pm, Thomas Schilling wrote:
> C++ CODE COMPLETION
>
> Seems it's an impatiently expected feature.
> So I'll give you a short survey of what issues
> we're struggling with. (Until now we held our
> discussion in German and outside kdevelop-devel).
If you're struggling then please contact this list (and you have done now
that's great :) ). I think there are plenty of people who can help with
flex/bison parsing issues etc. If translating to english is a problem, then
could the german discussion be run through babelfish or similar? Then english
speakers know what's going on and can maybe help out?
> The first features the C++ code completion (CC)
> will support are:
> - member completion
> - argument hinting/completion
> - type information
>
> About 100 more features are conceivable but
> the time ... ;-)
>
> Undoubtedly we need a parser. Therefore we
> had to learn BISON (at least I had to) and even
> before had to find out that we had to learn about it.
> It seems that work will continue faster now but
> it's still a lot of work and C++ has a very complicated
> grammar with many many ambiguities.
>
> If someone want's to help he/she(?) should first
> read the FLEX manual ("man flex") and the BISON
> documentation ("info bison" or GNU website).
I can't find any bison grammar in cppsupport. I see two flex grammars with
minor differences:
tokenizer-cc.l tokenizer.l
'tokenizer-cc.l' has these extra tokens:
/*==> added by DANIEL <==*/
<INITIAL>"emit" {return CPEMIT;}
<INITIAL>"void" {return CPVOID;}
<INITIAL>"int" {return CPINT;}
<INITIAL>"bool" {return CPBOOL;}
<INITIAL>"float" {return CPFLOAT;}
<INITIAL>"char" {return CPCHAR;}
<INITIAL>"static_cast" {return CPSCAST;}
<INITIAL>"dynamic_cast" {return CPDCAST;}
<INITIAL>"for" {return CPFOR;}
<INITIAL>"while" {return CPWHILE;}
<INITIAL>"do" {return CPDO;}
<INITIAL>"if" {return CPIF;}
<INITIAL>"else" {return CPELSE;}
<INITIAL>"switch" {return CPSWITCH;}
<INITIAL>"case" {return CPCASE;}
<INITIAL>"break" {return CPBREAK;}
<INITIAL>"default" {return CPDEFAULT;}
<INITIAL>"return" {return CPRETURN;}
If you only want these tokens to be parsed in a 'more detailed' parse phase
why not have one flex grammar and use the 'REJECT' macro to reject these
tokens if doing the standard 'less detailed' parse for the class tree, as
oppposed to code completion?
eg
<INITIAL>"break" { if (classParserPhase) {REJECT;} else {return CPBREAK;} }
So if 'classParserPhase' is true, it will drop thru' and match a catch all
rule further down, and return some other token. Or you could do something
similar with start states - have a start state for 'more detailed' code
completion parsing.
<CODECOMPLETION>"break" {return CPBREAK;}
> Currently the most promising approach for the
> CC parser is one big parser that creates sort of a
> parse tree that is evaluated by the different aspects
> of the CC part.
That's the current class store structure with extra 'more detailed' attributes
I assume?
-- Richard
More information about the KDevelop-devel
mailing list