Thread: [CEDET-devel] RE: Re[1]: Another semantic parsing issue.
Brought to you by:
zappo
From: Oviedo, J. <jo...@te...> - 2004-07-13 21:51:55
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <HTML> <HEAD> <META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; = charset=3DUS-ASCII"> <META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version = 5.5.2653.12"> <TITLE>RE: Re[1]: Another semantic parsing issue.</TITLE> </HEAD> <BODY> <P><FONT SIZE=3D2>Sorry about the HTML thing...though I posted that = message and this one with "plain text" mode using MS Outlook. = I know, I know... I should be using emacs for mail. :-) ...but my = company requires me to use Outlook.</FONT></P> <P><FONT SIZE=3D2>Again, this is plain-text mode according to MS = Outlook so please let me know if you still experience the HTML stuff. = If you do then I'm not sure what to do...perhaps email from my yahoo = account.</FONT></P> <P><FONT SIZE=3D2>Anyway, thanks for the explanation. I will look into = this as you suggested. </FONT> </P> <P><FONT SIZE=3D2>Thanks.</FONT> </P> <P><FONT SIZE=3D2> -------------</FONT> <BR><FONT SIZE=3D2> Javier</FONT> <BR><FONT SIZE=3D2> </FONT> </P> <BR> <BR> <P><FONT SIZE=3D2>-----Original Message-----</FONT> <BR><FONT SIZE=3D2>From: Eric M. Ludlam [<A = HREF=3D"mailto:er...@si...">mailto:er...@si...</A>] = </FONT> <BR><FONT SIZE=3D2>Sent: Tuesday, July 13, 2004 5:44 PM</FONT> <BR><FONT SIZE=3D2>To: Oviedo, Javier</FONT> <BR><FONT SIZE=3D2>Cc: ced...@li...; = kla...@sd...</FONT> <BR><FONT SIZE=3D2>Subject: Re[1]: Another semantic parsing = issue.</FONT> </P> <BR> <P><FONT SIZE=3D2>Hi,</FONT> </P> <P><FONT SIZE=3D2> Could you please turn of HTML when you send = email. I cannot copy/paste the source you have sent because it is = full of html syntax.</FONT></P> <P><FONT SIZE=3D2> The problem, is because semantic does not know = the value of the THIS_IS_UGLY macro. Solving the problem requires = both writing a pre-processor stage into Semantic, and forcing semantic = to parse all header files in order to determine if a given symbol is = active or not. Even then, it would be wrong because it would also = need to parse the Makefile for that file to see if the macro is being = sent in as a compiler switch.</FONT></P> <P><FONT SIZE=3D2> If the simple change of moving the opening { = to the first line after the IF and ELSE clause were made, then it would = parser the rest of the file ok, marking the first instance as = unparsable.</FONT></P> <P><FONT SIZE=3D2> It is possible to fix this more simply on a = case by case basis by modifying the C lexer. Look at = semantic/semantic-c.el at the lexer semantic-lex-c-if-0 for an example = of how to hack in more examples. You could then add = `semantic-lex-c-if-THIS_IS_UGLY' and add that in turn to = `semantic-c-lexer'.</FONT></P> <P><FONT SIZE=3D2>Eric</FONT> </P> <P><FONT SIZE=3D2>>>> "Oviedo, Javier" = <jo...@te...> seems to think that:</FONT> <BR><FONT SIZE=3D2>><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML = 3.2//EN"></FONT> <BR><FONT SIZE=3D2>><HTML></FONT> <BR><FONT SIZE=3D2>><HEAD></FONT> <BR><FONT SIZE=3D2>><META HTTP-EQUIV=3D"Content-Type" = CONTENT=3D"text/html; charset=3DUS-ASCII"> </FONT> <BR><FONT SIZE=3D2>><META NAME=3D"Generator" = CONTENT=3D"MS Exchange Server version </FONT> <BR><FONT SIZE=3D2>>5.5.2653.12"> <TITLE>Another = semantic parsing issue.</TITLE> </HEAD></FONT> <BR><FONT SIZE=3D2>><BODY></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>Hello = everyone!</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>I see another = semantic parsing problem relating to the </FONT> <BR><FONT SIZE=3D2>>ecb methods buffer display. Since there is going = to be another beta </FONT> <BR><FONT SIZE=3D2>>soon, I thought I'd try to get this out = there(and hopefully fixed) </FONT> <BR><FONT SIZE=3D2>>before that new = drop.</FONT></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>I'm = using:</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>- gnu emacs = 21.3.50.8 (i386-mingw-nt5.1.2600)</FONT> </FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>- ECB 2.25 (also = happens with the latest cvs snapshot </FONT> <BR><FONT SIZE=3D2>>from a few days ago)</FONT> = <BR><FONT SIZE=3D2>- cedet-1.0beta2b</FONT> </FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>Below is an = example C-file(based on the true offending</FONT> <BR><FONT SIZE=3D2>>file) that reproduces my problem. Before I hear = about it... the ifdef </FONT> <BR><FONT SIZE=3D2>>below is rather ugly, but I am not able to = &quot;pretty it up&quot; </FONT> <BR><FONT SIZE=3D2>>since this file is under source control and I am = not the owner of it. </FONT> <BR><FONT SIZE=3D2>>Nonetheless, the syntax is legal C and = therefore, IMHO, I believe that </FONT> <BR><FONT SIZE=3D2>>the parsing mechanism should support it. I hope = that I can get people </FONT> <BR><FONT SIZE=3D2>>to agree with me. = :-)</FONT></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>The problem is as = follows: </FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>The ecb methods = buffers will show any function above </FONT> <BR><FONT SIZE=3D2>>foo1 (in this case bar) and including foo1, but = not any functions below </FONT> <BR><FONT SIZE=3D2>>foo1, i.e foo2, foo3, and foo4. As a side note, = since there are </FONT> <BR><FONT SIZE=3D2>>&quot;two&quot; foo1 declaration lines, = the ecb methods buffer displays </FONT> <BR><FONT SIZE=3D2>>only the first one...this behavior is fine, but = maybe both should be </FONT> <BR><FONT SIZE=3D2>>displayed?? Just a thought I throw out for = discussion.</FONT></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>Anyway, semantic = does not seem to the like the </FONT> <BR><FONT SIZE=3D2>>#ifdef/#else around the foo1 declarations. Since = this is legal C, </FONT> <BR><FONT SIZE=3D2>>albiet ugly C, is there a way to get semantic to = properly </FONT> <BR><FONT SIZE=3D2>>parse/recognize this? This hurts me because many = files/functions have </FONT> <BR><FONT SIZE=3D2>>this syntax and I am required to live with = it.</FONT></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>When I remove the = ugly #ifdef/#else statement, the ecb </FONT> <BR><FONT SIZE=3D2>>methods buffer displays all functions = appropriately.</FONT> </P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>I appreciate your = time. Thanks!</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>><BR></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT = SIZE=3D2>/****************** START of FILE </FONT> <BR><FONT SIZE=3D2>>******************/</FONT> = <BR><FONT SIZE=3D2>#include </FONT> <BR><FONT SIZE=3D2>>&lt;stdio.h&gt;</FONT> = </P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>void = bar()</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>{</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>}</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>#ifdef = THIS_IS_UGLY</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>tint foo1 (int x, = int y, int z) {</FONT> <BR><FONT </FONT> <BR><FONT SIZE=3D2>>SIZE=3D2>#else</FONT> = <BR><FONT SIZE=3D2>tint foo1 (int x, int y) = {</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>#endif /* = THIS_IS_UGLY */</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>&nbsp;&nbsp;&nbsp; </FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>&nbsp; return = 1;</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>&nbsp; = </FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT SIZE=3D2>} /*&nbsp; = foo1*/</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>void = foo2()</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>{</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>}</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>void = foo3()</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>{</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>}</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>void = foo4()</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>{</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>}</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT SIZE=3D2>/* nothing past = this point */</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT = SIZE=3D2>/****************** END of FILE </FONT> <BR><FONT SIZE=3D2>>******************/</FONT> </P> = <BR></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>><P><FONT = SIZE=3D2>&nbsp;-------------</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>&nbsp;Javier</FONT></FONT> <BR><FONT SIZE=3D2>><BR><FONT = SIZE=3D2>&nbsp;</FONT></FONT> <BR><FONT SIZE=3D2>></P></FONT> <BR><FONT SIZE=3D2>><BR></FONT> <BR><FONT SIZE=3D2>></FONT> <BR><FONT SIZE=3D2>></BODY></FONT> <BR><FONT SIZE=3D2>></HTML></FONT> <BR><FONT SIZE=3D2>></FONT> </P> </BODY> </HTML> |