我有一个头文件,我想为其生成一个AST并将其保存到文件中。我在Visual Studio命令行上运行clang-cl
,如下所示:
clang-cl <header-path> -Xclang -ast-dump -fsyntax-only -fno-color-diagnostics -w
然后我接受此命令的输出并将其保存到名为f.ast
的文件中。我现在想用clang Python绑定从该文件中读取AST。我创建了以下脚本:
from clang.cindex import Config, Index
import clang.cindex
import os
import logging
def read_ast(libclang_path, ast_file):
assert os.path.exists(libclang_path)
assert os.path.exists(ast_file)
Config.set_library_file(libclang_path)
logging.debug("Creating index...")
index = Index(clang.cindex.conf.lib.clang_createIndex(False, True))
logging.debug("Reading ast file '{}'...".format(
ast_file
))
tu = index.read(ast_file)
assert tu is not None
并用适当的args调用它。将“读取文件'f.ast'...”打印到终端后,出现以下弹出错误标题为“Microsoft Visual C ++运行时库”:
断言失败了!
程序:C:\ Program Files(x86)\ LLVM \ bin \ libclang.dll文件D:\ src \ llvm_release_build_3.7.0 \ llvm ... / Bitstre ... eader.h行:78
表达式:((结束 - 开始)&amp; 3)== 0&amp;&amp; “Bitcode流不是4字节的倍数”
你知道问题可能是什么以及如何解决它?
答案 0 :(得分:1)
AST转储是一个调试工具。它与翻译单元的序列化表示不同。使用libclang解析和序列化标题,而不是使用clang-cl从命令行执行此操作。