[cfe-dev] Semantic Analysis in Clang

Manuel Klimek klimek at google.com
Fri Jan 25 07:30:24 PST 2013


On Fri, Jan 25, 2013 at 4:26 PM, Mohammad Adil <madil90 at gmail.com> wrote:

> Hi,
>   I am interested in helping any way I can. I am a research assistant and
> always looking to help the community. Unfortunately, I am new to compiler
> theory. If you can give me a few guidelines on how to achieve that, I would
> be glad to help. Also, can you please name a few good resources on compiler
> theory (my university isn't focusing on compilers so not many people here
> to help).
>

+dgregor, who would be the right person to guide you here (or delegate said
guidance to the right person).


>    Regarding clang, what exactly happens when clang encounters an error (I
> mean i want to pause the recursive visitor at the point when it encounters
> an error and not end the program). Also, is it possible to
>

The RecursiveASTVisitor runs *after* clang finished parsing the program.
Thus, I would think what you want to do is pretty much impossible.


> parse the code in rewriter buffer without saving it (parse on the fly).
>

Yes, that's definitely possible. You can look at the examples in the c++11
migration tool in the clang-extra-tools repository (
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/cpp11-migrate/)

Cheers,
/Manuel


>
> Regards,
> Adil
>
>
> On Fri, Jan 25, 2013 at 7:52 PM, Manuel Klimek <klimek at google.com> wrote:
>
>> On Fri, Jan 25, 2013 at 3:43 PM, Mohammad Adil <madil90 at gmail.com> wrote:
>>
>>> Let us say that I write some code which has some errors. Now I am
>>> reparsing it. Can I halt the parsing when I encounter an error so that I
>>> can remedy it? If so, what happens to the AST? I mean, does it break at
>>> that point or does it contain the rest of the code too with some kind
>>> of substitution for the error part?
>>>
>>
>> No, if you reparse it and it breaks, all you know is that what you wanted
>> to do was incorrect... As I mentioned, whether this is a practical approach
>> depends on what your fallback strategy is - for example, if you don't want
>> to do anything in case of an error, simply not saving after getting an
>> error in the reparsing would solve the problem.
>>
>> That said, it would be really cool to have full access to the lookup
>> after the semantic analysis - so if you're interested in tackling this, I'd
>> expect that you'd make a lot of people very happy :D
>>
>> Cheers,
>> /Manuel
>>
>>
>>>
>>>
>>>
>>> On Fri, Jan 25, 2013 at 7:31 PM, Manuel Klimek <klimek at google.com>wrote:
>>>
>>>> On Fri, Jan 25, 2013 at 2:57 PM, Mohammad Adil <madil90 at gmail.com>wrote:
>>>>
>>>>> I need to insert some code in the file being parser. I need to make
>>>>> sure that the resulting file compiles fine. The code that I am inserting
>>>>> will mostly be " ostream << type_x ;". Now before I do that, I need to
>>>>> ensure that "type_x" has a stream operator defined. Is that possible any
>>>>> other way? I am very grateful for your help.
>>>>>
>>>>
>>>> What we do in the c++11 transition tools in clang-extra is:
>>>> - parse
>>>> - detect place to insert
>>>> - insert
>>>> - reparse, look for errors
>>>>
>>>> Whether that's viable depends on how big the chance is that you're
>>>> making an error, and what fallbacks you have.
>>>>
>>>> Cheers,
>>>> /Manuel
>>>>
>>>>
>>>>
>>>>>
>>>>> Regards,
>>>>> Adil
>>>>>
>>>>>
>>>>> On Fri, Jan 25, 2013 at 6:34 PM, Manuel Klimek <klimek at google.com>wrote:
>>>>>
>>>>>> On Fri, Jan 25, 2013 at 1:13 PM, Mohammad Adil <madil90 at gmail.com>wrote:
>>>>>>
>>>>>>> Thanks for the reply. Well, here's the detailed problem. Once all
>>>>>>> the syntax checking has been done, the next step before generating IR is to
>>>>>>> do semantic analysis and type checking. Let us say that I encounter a code
>>>>>>> like this:
>>>>>>>
>>>>>>> string b;
>>>>>>> vector<T> a;
>>>>>>> cout<<b;
>>>>>>> cout<<a;
>>>>>>>
>>>>>>>       How does clang figure out that the 3rd statement is valid
>>>>>>> because an operator for string exists, while the 4rth statement is not
>>>>>>> valid. More specifically, I want to know how clang searches through all the
>>>>>>> operators (or functions). I have to use this functionality. Does the clang
>>>>>>> api allow me to do this easily or will I have to replicate this
>>>>>>> functionality?
>>>>>>>
>>>>>>
>>>>>> As far as I know the clang API does not allow you to do that easily -
>>>>>> you need the full semantic analysis state at that point during parsing, and
>>>>>> as far as I'm aware this only exists implicitly in the Sema* classes.
>>>>>> Overload resolution is one of those really complex and messy parts of C++ :)
>>>>>>
>>>>>> If you let us know what actual problem you're trying to solve, there
>>>>>> might be solutions to that which are simpler than using overload resolution
>>>>>> :)
>>>>>>
>>>>>> Cheers,
>>>>>> /Manuel
>>>>>>
>>>>>>
>>>>>>> Regards,
>>>>>>> Adil
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Fri, Jan 25, 2013 at 4:35 PM, Manuel Klimek <klimek at google.com>wrote:
>>>>>>>
>>>>>>>> On Thu, Jan 24, 2013 at 12:49 PM, madil90 <madil90 at gmail.com>wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>    I am looking to perform some semantic analysis in clang. More
>>>>>>>>> specifically, I want to know whether a function exists for a
>>>>>>>>> certain type.
>>>>>>>>> The function is global. e.g.
>>>>>>>>>
>>>>>>>>> String toString(A a);
>>>>>>>>>
>>>>>>>>>     I want to differentiate that this function exists for type A
>>>>>>>>> and not for
>>>>>>>>> type B. I have built an AST and am parsing it. How can I achieve
>>>>>>>>> this?
>>>>>>>>> (Whenever I encounter a type)
>>>>>>>>>
>>>>>>>>
>>>>>>>> I'd loop over all declarations of toString and see which type they
>>>>>>>> take... Perhaps I'm misunderstanding your problem though :)
>>>>>>>>
>>>>>>>> Cheers,
>>>>>>>> /Manuel
>>>>>>>>
>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>> Adil
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> View this message in context:
>>>>>>>>> http://clang-developers.42468.n3.nabble.com/Semantic-Analysis-in-Clang-tp4030012.html
>>>>>>>>> Sent from the Clang Developers mailing list archive at Nabble.com.
>>>>>>>>> _______________________________________________
>>>>>>>>> cfe-dev mailing list
>>>>>>>>> cfe-dev at cs.uiuc.edu
>>>>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Mohammad Adil
>>>>>>> LUMS SSE
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Mohammad Adil
>>>>> LUMS SSE
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Mohammad Adil
>>> LUMS SSE
>>>
>>
>>
>
>
> --
> Mohammad Adil
> LUMS SSE
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130125/633881ad/attachment.html>


More information about the cfe-dev mailing list