libClang python binding介绍

llvm clang编译工具不仅用于编译,还可以用来对代码分析。也可以用于代码翻译。

libclang python binding 安装过程:

下载llvm,clang,编译后生成一大票库文件。

编译可以通过常见的configure,make方法,也可以通过cmake.

而libclang python binding是通过ctypes来访问libClang的,无需编译。

将libclang python binding的python文件拷贝到当前目录,并且设置一下libClang的路径就可以使用了。

#!/usr/bin/env python
import sys
import clang.cindex
from clang.cindex import Config
Config.set_library_path("/Users/mahongquan/llvm3.4/llvm_build/lib")

def showToken(node):
    ts=node.get_tokens()
    for t in ts:
        print t.spelling
index = clang.cindex.Index.create()
tu = index.parse("ToyClangPlugin.cpp")
showToken(tu.cursor)

例子2,查找类的引用

#!/usr/bin/env python
import sys
import clang.cindex
from clang.cindex import Config
Config.set_library_path("/Users/mahongquan/llvm3.4/llvm_build/lib")

def find_typerefs(node, typename):
    """ Find all references to the type named 'typename'
    """
    if node.kind.is_reference():
        ref_node = node.get_definition()
        #print ref_node.spelling
        if ref_node.spelling == typename:
            print 'Found %s [line=%s, col=%s]' % (
                typename, node.location.line, node.location.column)
    # # Recurse for children of this node
    for c in node.get_children():
        find_typerefs(c, typename)
index = clang.cindex.Index.create()
tu = index.parse("person.cpp")
find_typerefs(tu.cursor,"Person")






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值