深刻研究Clang(三) libclang

做者:史宁宁

现在的Clang,不不过一个编译器前端,同一时候也可以做为一个库使用。做为一个库使用的时候,可以用它去分析C/C++/ObjectC语言代码,可以分析源代码获得AST,也可以获取已经分析好的AST,也可以遍历AST,还可以获取AST中基本元素的物理源代码位置。这就是libclang。

libclang提供了一系列的C语言的接口,但是这些接口并不能全然提供存储在Clang C++ AST中的所有信息,仅仅能提供部分基本信息,但是这些基本信息已经可以知足普通状况下的使用。主要目的是为了稳定,并且可以支持开发工具的基本功能。(clang/include/clang-c/Index.h中的凝视原文例如如下: This C interface to Clang will never provide all of the information representation stored in Clang's C++ AST, nor should it: the intent is to maintain an API that is relatively stable from one release to the next, providing only the basic functionality needed to support development tools.)

与此同一时候,libclang支持和python绑定使用,也就是说你可以是用python去调用libclang。clang在clang/bindings/python/这个文件夹如下提供了绑定所需要的文件。眼下这个文件夹如下除了README以外还有三个文件夹:clang,examples,tests。当中clang文件夹如下的文件是绑定所需要的,examples文件夹如下是绑定后測试用的两个小样例。test文件夹如下应该是測试需要的一些文件(该文件夹如下文件眼下尚未认真分析)。仅仅需要把绑定文件放到python的库文件如下(包括clang文件夹),而后确保系统安装clang到系统文件夹,以后就可以执行样例了。

libclang带来的长处很是明显,可以在很是多不一样的环境如下轻松的用上libclang,仅仅是做为一个提供了parser功能的库,很是方便快捷的嵌入本身的工具中,避免了大量的反复工做。同一时候也不用去分析clang内部的代码,不需要熟悉内部大量的AST相关的代码,就可以使用,这可以节省大量的时间。固然,想深挖clang的代码的同窗,也可以把这里看成一个突破口。前端

------------------------------------------------------------转载请注明出处--------------------------------------------------------------------------------------
python

相关文章
相关标签/搜索