作者:史宁宁



如今的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的代码的同学,也能够把这里当作一个突破口。

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

深入研究Clang(三) libclang的更多相关文章

  1. 【原创】JPEG图像密写研究(三) 数据流译码

    [原创]这次更新比较慢,译码过程比想象中复杂一些,更主要是译出来的DCT系数无法确定是否正确,要想验证就需要再进行正向压缩编码,再次形成jpeg图像验证正确,后续工作正在开展,这里就说一说译码的主要思 ...

  2. CSS 设计彻底研究(三)深入理解盒子模型

    第三章 深入理解盒子模型 盒子模型是CSS控制页面的基础.需要清楚“盒子”的含义是什么,以及盒子的组成.此外,应该理解DOM的基本概念,以及DOM树是如何与一个HTML文档对应的,在此基础上充分理解“ ...

  3. 深入研究Clang(四) Clang编译器的简单分析

    作者:史宁宁(snsn1984) 首先我们确定下Clang编译器的详细内容和涵盖范围.之前在<LLVM每日谈之二十 Everything && Clang driver>中 ...

  4. JSON库的使用研究(三)

    怎么选择JSON库? 从整体测试结果来看,总结如下: 用于序列化.反序列的功能,数量量小,吞吐量不大于10000每秒的,选择gson: 用于解析JSON的,还是用Fastjson吧,虽然听说坑很多. ...

  5. MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息

    接着上一篇的moquette-mqtt 的使用之broker启动之后,我们需要启动moquette-mqtt 的服务端发布消息. 在moquette-mqtt 的mqtt-client中三种方式实现发 ...

  6. 深入研究Clang(五) Clang Lexer代码阅读笔记之Lexer

    作者:史宁宁(snsn1984) Clang的Lexer(词法分析器)的源代码的主要位置例如以下: clang/lib/Lex    这里是基本的Lexer的代码: clang/include/cla ...

  7. 深入研究Clang(十) Clang Static Analyzer简介

    Clang Static Analyzer 官网地址:http://clang-analyzer.llvm.org/ Clang Static Analyer是一个源码分析工具,它可以发现C.C++和 ...

  8. JS&CSS文件请求合并及压缩处理研究(三)

    上篇我们进行了一些代码方面的准备工作.接下来的逻辑是:在View页面解析时,通过 Html.AppendResFile 方法添加的资源文件,我们需要按照分组.优先级,文件名等条件,对其路径进行合并.具 ...

  9. django-cms 代码研究(三)插件(plugs in)

    插件(plugs in) djangocms支持的插件有: http://docs.django-cms.org/en/latest/basic_reference/plugin_reference. ...

随机推荐

  1. MXML的一些基本语法

    以下内容是一个视频的学习笔记<Flex4视频教程>,所以,先关记录也是以现在的Flash Builder为基础. <fx:Script/>  是脚本文件的声明 var代表数值, ...

  2. Chapter13:拷贝控制

    拷贝控制操作:拷贝构造函数.拷贝赋值运算符.移动构造函数.移动赋值运算符.析构函数. 实现拷贝控制操作的最困难的地方是首先认识到什么时候需要定义这些操作. 拷贝构造函数: 如果一个构造函数的第一个参数 ...

  3. js获取时间搓

    var oData=new Date().getTime(2016-01-16); console.log(oData);

  4. Spark RDD概念学习系列之RDD的创建(六)

    RDD的创建  两种方式来创建RDD: 1)由一个已经存在的Scala集合创建 2)由外部存储系统的数据集创建,包括本地文件系统,还有所有Hadoop支持的数据集,比如HDFS.Cassandra.H ...

  5. 【转】Hibernate利用@DynamicInsert和@DynamicUpdate生成动态SQL语句

    原文链接:http://www.cnblogs.com/quanyongan/p/3152290.html 最近在使用Hibernate4中,发现两个很有奥秘的注解 @DynamicInsert 和  ...

  6. esp8266烧写机智云固件方法

    转:http://blog.csdn.net/k7arm/article/details/51925941 =====================以下为我转载的文章================ ...

  7. plutil工具

    作用: 检查元素文件语法: 转换格式.支持xml binary json: 插入key-value: 打印内部信息: 详细解释: -lint                         check ...

  8. ASP.NET MVC- 在Area里使用RedirectToAction跳转出错的解决方法

    mvc使用Area分区开发后,存在不同Area之间的跳转,需要为每个区间添加Area规则,如下: 按 Ctrl+C 复制代码 using System.Web.Mvc; namespace web.A ...

  9. POJ2503——Babelfish

    Description You have just moved from Waterloo to a big city. The people here speak an incomprehensib ...

  10. AP(应付帐管理)

    --更新供应商地点 PROCEDURE update_vendor_site(p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false, x_return ...