libClang python binding介绍

来源:互联网 发布:温泽三坐标编程视频 编辑:程序博客网 时间:2024/05/21 16:09

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

libclang python binding 安装过程:

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

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

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

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

#!/usr/bin/env pythonimport sysimport clang.cindexfrom clang.cindex import ConfigConfig.set_library_path("/Users/mahongquan/llvm3.4/llvm_build/lib")def showToken(node):    ts=node.get_tokens()    for t in ts:        print t.spellingindex = clang.cindex.Index.create()tu = index.parse("ToyClangPlugin.cpp")showToken(tu.cursor)

例子2,查找类的引用

#!/usr/bin/env pythonimport sysimport clang.cindexfrom clang.cindex import ConfigConfig.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")






0 0
原创粉丝点击