zoukankan      html  css  js  c++  java
  • 深入研究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的代码的同学,也可以把这里当作一个突破口。

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

  • 相关阅读:
    python3.6中 字典类型和字符串类型互相转换的方法
    "sorted()"中的"Key Functions"
    tuple unpacking
    理解"__repr__"
    Python中的"Special Method"
    abstractmethod
    JavaScript括号中什么什么不加引号什么时候加引号?
    加载网页时速度慢的一些知识点
    Login登录页面的制作流程(摘要)
    JavaScript总结1
  • 原文地址:https://www.cnblogs.com/ainima/p/6331927.html
Copyright © 2011-2022 走看看