[cfe-dev] Requesting Help Understanding ASTs and LibTooling

Jonas Devlieghere via cfe-dev cfe-dev at lists.llvm.org
Mon Jul 11 23:48:32 PDT 2016


Hi,

I can answer some of your questions:

 - Does libclang get and parse the entire source file? Yes, it will
consider the whole translation unit.
 - Get file location data and skip traversing includes? Use
clang_Location_isFromMainFile(clang_getCursorLocation(cursor))
 - Get the cursor kind as string? Use clang_getCursorKindSpelling(cursor_kind)

Regards,

Jonas Devlieghere

On Tue, Jul 12, 2016 at 12:13 AM, Aryal, Saurav
<saurav.aryal at bison.howard.edu> wrote:
> Hi,
>
> I have decided to use libclang because I feel like it would suit my purpose
> more. I had run-time concerns with the python bindings but the C bindings
> are working fine.
>
> I still have a few more questions/concerns. Please see the README on
> https://github.com/Saurav-K-Aryal/libclang-help for details.
>
> The questions are also listed on the top of the file as comments.
>
> Any help would be appreciated.
>
> Thanking you.
>
> Sincerely,
> Saurav
>
> On Mon, Jul 11, 2016 at 1:58 AM, Mikhail Ramalho <mikhail.ramalho at gmail.com>
> wrote:
>>
>> Hi,
>>
>> If you're interested in libTooling, you can check ESBMC [0], more
>> specifically our clang_c_converter [1].
>>
>> We use libTooling to generate the AST and we implement our own AST
>> traverser code. Currently, it only works for C programs; in the future we'll
>> release the C++ code.
>>
>> Thanks,
>>
>> [0] https://github.com/esbmc/esbmc
>> [1]
>> https://github.com/esbmc/esbmc/blob/master/clang-c-frontend/clang_c_convert.cpp
>>
>>
>> 2016-07-08 20:57 GMT+01:00 Jonas Devlieghere via cfe-dev
>> <cfe-dev at lists.llvm.org>:
>>>
>>> On Fri, Jul 8, 2016 at 8:45 PM, Aryal, Saurav via cfe-dev
>>> <cfe-dev at lists.llvm.org> wrote:
>>> > Hi everyone,
>>> >
>>> > I am just starting out with Clang and working for a project where I am
>>> > trying to generate and compare ASTs to measure code similarity.
>>>
>>> Welcome, good luck with your project!
>>>
>>> > I figured around a way using Clang to get the AST, but it turns out I
>>> > am
>>> > expected to use Libtooling.
>>>
>>> There are actually different interfaces available to interact with
>>> Clang's AST. Which one is best depends on your use case. I'd recommend
>>> looking at [1] to make an informed decision.
>>>
>>> > Anyone have an example where I can parse C++
>>> > code to generate an AST using Libtooling.
>>>
>>> Yes; clang's documentation [2] contains an excellent tutorial. There
>>> are also many blog post available that will get you started with
>>> concrete examples, including one I wrote myself when I started looking
>>> at the clang AST [3].
>>>
>>> > Also, would love design
>>> > suggestions regarding comparing tree similarity. any examples with
>>> > explanations would be really helpful.
>>> >
>>> > Thanking you.
>>> >
>>> > Sincerely,
>>> > Saurav
>>> >
>>> > _______________________________________________
>>> > cfe-dev mailing list
>>> > cfe-dev at lists.llvm.org
>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>> >
>>>
>>> [1] http://clang.llvm.org/docs/Tooling.html
>>> [2] http://clang.llvm.org/docs/LibTooling.html
>>> [3] https://jonasdevlieghere.com/understanding-the-clang-ast/)
>>>
>>> -- Jonas
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>
>>
>>
>>
>> --
>>
>> Mikhail Ramalho.
>
>



More information about the cfe-dev mailing list