more code completion fun!
christopher j bottaro
cjb at cs.utexas.edu
Fri Mar 9 21:23:03 GMT 2001
yeah, it'll work in myclass::mymethod2, but since there are errors in
mymethod, it won't recoginize it as a method def, it will recognize it as an
error and move on to parsing the next method.
would msvc++ code completion work with mymethod?
christopher
On Thursday 08 March 2001 23:12, you wrote:
> I've got a question, this maybe a stupid one.
>
> This is all to parse the file the user is currently working in, right?
>
> So the goal is to find out what the user is trying to do. Then what
> happens if the current file is full of nonsense e.g.
> I start a method definition:
>
> namespace mynamespace {
>
> myclass::mymethod (int myarg1, int myarg2) {
> myarg2=myarg1-3
>
>
> and i forget to close the damn function scope and maybe also forget the
> semicolon in the function or make other errors.
>
> Then i go on with next method
>
> myclass::mymethod2 (int myarg1, int myarg2) {
> myarg2=myarg1;
>
>
> }
>
>
> Will this all then work in myclass::mymethod2 at all? Will mymethod1
> also be available for code completion already?
>
> Roland
>
> --- christopher j bottaro <cjb at cs.utexas.edu> wrote:
> > phew, after attempting it with regular expressions, then moving on to
> > lex and
> > yacc, i've finally gotten somewhere after ditching all that and
> > writing an
> > LL(k) grammer for use with ANTLR 2.0. so far the grammer can parse
> > method
> > definitions include parameter and local variable declarations. the
> > grammer
> > recognizes scope and parses to remember the scope where the var was
> > defined.
> > for example...
> >
> > virtual const char* SomeClass::AnotherClass::AMethod(int& x, char y)
> > {
> >
> > // scope 1a
> > {
> > QString var;
> > }
> >
> > // scope 1b
> > {
> > QPoint var;
> >
> > // scope 2a
> > {
> > QRect var;
> > }
> > }
> >
> > }
> >
> > the method will be parsed, including its return type, qualified name,
> > and
> > parameters. then codeblocks will be parsed including their begin and
> > end
> > lines and all variable declarations enclosed in them will be parsed.
> >
> > after the parsing, it shouldn't be too hard to determine the line
> > number that
> > the cursor is currently on, determine what scope that falls in, then
> > search
> > the QDict of that scope for what ever variable you want completion
> > for, get
> > its type, look up its type in KDevelop's classstore, then populate a
> > listbox
> > full of members.
> >
> > so far i've just tested it by building a parser outta the grammer and
> > running
> > it in a console program on kwview.cpp which is 70k. it parses and
> > prints out
> > the results to cout in less than a second on a p2 600.
> >
> > i suppose the real challenge is resolving function calls and pointer
> > derefs?
> > anyone have any suggestions?
> >
> > also, when i compile my grammer, i get like over a page of
> > non-determinisms,
> > but they don't seem to matter at all... here are some of the ones
> > that
> > bother me...
> >
> > primary_expr
> >
> > : (scope)? IDENTIFIER
> > :
> > | INTEGER (DOT INTEGER)? // non-determinism here
> > | STRING_LIT
> > | CHAR_LIT
> > | OP expression CP
> >
> > ;
> >
> > // this rule is fine...
> > postfix_expr
> >
> > : primary_expr ( (OP (arg_expr_list)? CP)
> > :
> > | (OSB expression CSB)
> >
> > )?
> > ( ((DOT|PTR) postfix_expr)
> > )?
> > ;
> >
> > // this whole thing apperent causes a lot of non determinisms
> > unary_expr
> >
> > : (unary_op|INCR|DECR)* postfix_expr
> > :
> > | "sizeof" OP returntype CP
> > | "sizeof" postfix_expr
> >
> > ;
> >
> > cast_expr
> >
> > : (OP returntype CP)? unary_expr // non determinism here
> >
> > ;
> >
> > anyways, antlr is great, maybe the class parser should be rewritten
> > using it.
> > its cool how rules can have return types and take arguments and
> > throw
> > exceptions and such. its a lot more pleasureable writing an LL(k)
> > grammer
> > also. god, i wish i hadn't have dropped my automata theory class.
> >
> > tell me what you all think...potentially useful?
> >
> > christopher
> >
> > -
> > to unsubscribe from this list send an email to
> > kdevelop-request at kdevelop.org with the following body:
> > unsubscribe »your-email-address«
>
> =====
> --
> Roland Krause
> In the garage of life there are mechanics and
> there are drivers. Mechanics wanted!
>
> __________________________________________________
> Do You Yahoo!?
> Get email at your own domain with Yahoo! Mail.
> http://personal.mail.yahoo.com/
>
> -
> to unsubscribe from this list send an email to
> kdevelop-request at kdevelop.org with the following body: unsubscribe
> »your-email-address«
-
to unsubscribe from this list send an email to kdevelop-request at kdevelop.org with the following body:
unsubscribe »your-email-address«
More information about the KDevelop
mailing list