0
我有一個頭文件,我想要生成AST並將其保存到文件中。我在Visual Studio的命令行運行clang-cl
這樣的:解析clang與clang Python綁定生成的AST
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
並用適當的參數調用它。打印「讀AST文件‘F.AST’......」到終端後,我得到了以下彈出錯誤標題爲「微軟的Visual C++運行時庫」:
斷言失敗!
程序:C:\ Program Files文件(x86)的\ LLVM \ BIN \ libclang.dll文件d:\ SRC \ llvm_release_build_3.7.0 \ LLVM .../Bitstre ... eader.h行:78
表達式:((完啓動)& 3)== 0 & &「位碼流不是4個字節的倍數」
你知道是什麼問題是,如何解決?
函數'read'在clang的Python綁定中做了什麼:https://github.com/llvm-mirror/clang/blob/master/bindings/python/clang/cindex.py#L2220)?是不是要讀取由clang命令行中的-emit-ast或-ast-dump生成的AST? – BlackSheep
'read'接受一個用'TranslationUnit.save'編寫的AST文件。 -ast-dump不寫入AST文件。它以可讀的格式打印AST。 –