【发布时间】:2018-03-05 01:24:33
【问题描述】:
我使用 Clang python 绑定来提取 c/c++ 文件的 AST。它非常适合我编写的一个简单程序。问题是当我想将它用于像 openssl 这样的大项目时。我可以为项目的任何单个文件运行 clang,但 clang 似乎错过了项目的一些标题,并且只给了我文件的几个函数的 AST,而不是所有函数。我通过 -I 设置了包含文件夹,但仍然获得了部分功能。
这是我的代码:
import clang.cindex as cl
cl.Config.set_library_path(clang_lib_dir)
index = cl.Index.create()
lib = 'Path to include folder'
args = ['-I{}'.format(lib)]
translation_unit = index.parse(source_file, args=args)
my_get_info(translation_unit.cursor)
我收到太多头文件未找到错误。
更新
我用Make通过clang编译openssl?我可以将 -emit-ast 选项传递给 clang 以转储每个文件的 ast,但我现在无法通过 clang python 绑定读取它。
有什么线索可以保存翻译单元的序列化表示,以便我能够通过 index.read() 读取它吗?
谢谢!
【问题讨论】:
-
你用什么命令来获取简单程序的 AST ?
-
我更新了我的帖子并添加了我的代码。
标签: clang llvm abstract-syntax-tree