<div dir="ltr">Hi Will, I don't think you're missing anything obvious. Clang's parse tree is the result of semantic analysis, at which point a + b is fully resolved (type promotion, overload resolution, etc.). Clang knows how to skip function bodies for example but that's much more clearly defined than what you're trying to do.</div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Dec 8, 2014 at 3:28 PM, Will Hawkins <span dir="ltr"><<a href="mailto:whh8b@virginia.edu" target="_blank">whh8b@virginia.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thank you Guilherme and David for your responses!<br>
<br>
As you rightly pointed out, David, this is not a "normal" thing to do.<br>
And, again as you rightly deciphered, the target language is C++.<br>
<br>
All might not be lost, though. My ultimate goal is not so detailed<br>
that I would need to know every detail of the program. In fact, David,<br>
your example is quite illustrative of what I do NOT need to know.<br>
<br>
Given<br>
<br>
y = x + b;<br>
<br>
I don't particularly care whether or not that is a method invocation<br>
and/or the type conversion. I am mostly concerned with doing analysis<br>
on the names of variables and very high-level control flow<br>
calculations.<br>
<br>
Ideally, I would really just like to have a parse tree, although I've<br>
yet to find a way to get that without clang knowing much more about<br>
the types than I can possibly tell it.<br>
<br>
I will look very closely at the GSOC output, Guilherme. Based on what<br>
little I've seen so far, it looks incredibly promising. Thank you for<br>
digging that up for me.<br>
<br>
Based on the additional information that I sent here (which I should<br>
have provided in my first message, sorry!), please let me know if I am<br>
missing something obvious.<br>
<br>
Again, I appreciate your willingness to let me tap into the collective<br>
expertise on this list!<br>
<span class="HOEnZb"><font color="#888888"><br>
Will<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Sun, Dec 7, 2014 at 9:21 AM, Guilherme <<a href="mailto:guibufolo@gmail.com">guibufolo@gmail.com</a>> wrote:<br>
> Take a look a this interesting summer of code project. I think it goes<br>
> into the same direction as yours, flexible parsing of incomplete code.<br>
><br>
> <a href="https://www.google-melange.com/gsoc/project/details/google/gsoc2014/kapf/5643440998055936" target="_blank">https://www.google-melange.com/gsoc/project/details/google/gsoc2014/kapf/5643440998055936</a><br>
><br>
> On Sun, Dec 7, 2014 at 10:55 AM, David Chisnall<br>
> <<a href="mailto:David.Chisnall@cl.cam.ac.uk">David.Chisnall@cl.cam.ac.uk</a>> wrote:<br>
>> On 7 Dec 2014, at 02:55, Will Hawkins <<a href="mailto:whh8b@virginia.edu">whh8b@virginia.edu</a>> wrote:<br>
>><br>
>>> I'm trying to use cfe to lex/parse code snippets. The snippets will be<br>
>>> complete functions but they will be taken mostly out of their original<br>
>>> context. I'd like to generate an AST for the code<br>
>><br>
>> This problem doesn't sound possible.  When you have a code snippet taken out of any context, then you have no information about the types of any variable (or the definition of most of the types).  This makes constructing an AST impossible (you don't say what language you're using, but if it's C++ then you don't even know from a snippet whether a+b is an arithmetic operation or a method invocation, even if it's C, then you don't know what the type promotion should be).<br>
>><br>
>> I think, to answer the question that you want to be asking, we need to know what you want to do with the AST.<br>
>><br>
>> David<br>
>><br>
>><br>
>> _______________________________________________<br>
>> cfe-dev mailing list<br>
>> <a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
>> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</div></div></blockquote></div><br></div>