1 背景说明

  最近希望利用开源库来解析C++头文件,并做一些自动翻译、自动注释之类的工作。经过两天的调研,发现clang最有希望满足需求。clang提供了三套接口来共外部使用,liblang最适合作为独立工具开发使用。不过提供的原生接口是C++的,成本略高,本文记录下libclang的Python接口使用方法。

  相关文档及下载链接如下:

  clang(llvm) 接口官方文档:http://clang.llvm.org/docs/Tooling.html

  clang(llvm) 下载页面(源码/二进制):http://releases.llvm.org/download.html#8.0.0

  llvm非官方Python接口工程(不需要单独下载):https://github.com/llvm-mirror

2 clang(llvm) Python接口安装

  MacOSX平台的方法可以参考这篇文章《Parsing C++ in Python with Clang

  Windows平台安装方法如下:

  (1)安装 clang(llvm) 可执行二进制包,请看前文的clang(llvm)下载页面;

  (2)安装clang 的Python三方库:

pip install clang==版本号     # 我这里没有输入版本号也没问题

或者

python setup.py install      # 自行下载clang(llvm)的Python工程

  (3)在Python工程中需要指定 libclang.dll (Linux平台对应是libclang-8.0.so.1)所在路径,可以自行搜索一下(例如现在是 C:\Program Files\LLVM\bin\libclang.dll )

from clang.cindex import Config
from clang.cindex import Index

libclangPath = r'C:\Program Files\LLVM\bin'
if Config.loaded:
    pass
else:
    print 'Load'
    Config.set_library_path(libclangPath)

  (4)参考文章:http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang/

  核心来讲,libclang是个共享库,其接口能力集中在 clang/include/clang-c/Index.h,libclang附带了Python绑定,它位于clang/bindings/python中,位于模块clang.cindex中。该模块依赖于ctypes来加载动态libclang库,并尝试使用Pythonic API尽可能多地包装libclang

利用Clang(Python接口)来解析C++的更多相关文章

  1. Caffe学习系列(13):数据可视化环境(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  2. Python之XML解析详解

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  3. caffe(13) 数据可视化(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  4. Caffe学习系列(11):数据可视化环境(python接口)配置

    参考:http://www.cnblogs.com/denny402/p/5088399.html 这节配置python接口遇到了不少坑. 1.我是利用anaconda来配置python环境,在将ca ...

  5. python中html解析-Beautiful Soup

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

  6. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  7. Windows7 64下搭建Caffe+python接口环境

    参考链接: http://www.cnblogs.com/yixuan-xu/p/5858595.html http://www.cnblogs.com/zf-blog/p/6139044.html ...

  8. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  9. 利用阿里大于接口发短信(Delphi版)

    阿里大于是阿里通信旗下产品,融合了三大运营商的通信能力,提供包括短信.语音.流量直充.私密专线.店铺手机号等个性化服务.每条四分五,价钱还算公道,经老农测试,响应速度非常快,基本上是秒到.官方文档提供 ...

随机推荐

  1. WPF自定义用户控件不显示

    1,Themes\Generic.xaml最好不要更名 "Generic.xaml"这个名称并非偶然通过上面的叙述,你可能会有冲动将Generic.xaml中的Style代码剪切出 ...

  2. Linux命令rz

    rz :上传文件:sz: 下载文件: 在linux 系统中,使用rz(或 sz) 命令是,提示 -bash: rz(或者是sz): command not found .这个时候,说明没有安装 lrz ...

  3. 关于SpringMVC的配置流程以及一些细节

    首先说道SpringMvc是什么,SpringMVC是Spring框架里面的一个子框架,它对网站前后端的代码分层做了一套实现,这套实现给我们带来了几个好处,首先第一,SpringMVC实现了一个请求对 ...

  4. golang 实现文件传输小demo

    获取文件信息需要用到os. Stat接口,发送文件前开启接收者(服务端),启动客户端先发送文件名给接收者,接收者收到文件名返回确认信息"ok",才读取本地文件 发送给接收者. 发送 ...

  5. 【POI】java对excel的读写操作

    在工作中需要将mongo中的数据导出到excel中,所以根据需要学习了poi.以下为学习内容的总结: 1.POI是什么? poi是Apache团队开发的专门面对用java处理Excel文档的工具. 官 ...

  6. PHP编译安装报错:configure: error: mcrypt.h not found. Please reinstall libmcrypt

    我是在CentOS6.5安装php5.5.28这个版本,PHP编译代码如下: ./configure --prefix=/usr/local/php --with-config-file-path=/ ...

  7. call,apply,bind 方法的学习

    这是三个常用的操作函数的方法,在js中函数就是一等公民,所以说掌握这三个方法还是有必要的 call 和 apply,都会绑定函数的上下文(context)并立即执行调用该方法函数,两者区别在于,接受的 ...

  8. gulp在项目中的基本使用

    在项目中用gulp做项目的代码的管理,用起来很方便.主要用到了下面一些功能 关于js的处理,包括合并.压缩.加hash. 关于css的处理,编辑scss,合并css,加hash,自动加入前缀 本地开发 ...

  9. react-redux性能优化之reselect

    在React-redux深入理解中,我们知道了 react-redux 是如何将 React 和 Redux 进行连接的,今天来说一下其中存在的性能问题以及改进的方式. 一.存在的性能问题 以 Red ...

  10. JDBCTM中Statement接口提供的execute、executeQuery和executeUpdate之间的区别

    Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 方法execut ...