Parsing libclang解析生成错误的输出
我正在尝试使用libclang构建一个小型解析程序 要分析的源文件(Node.h): 主程序simple调用clang解析器并遍历AST中的所有元素:Parsing libclang解析生成错误的输出,parsing,llvm,clang,Parsing,Llvm,Clang,我正在尝试使用libclang构建一个小型解析程序 要分析的源文件(Node.h): 主程序simple调用clang解析器并遍历AST中的所有元素: int main(int argc, char *argv[]) { CXIndex index = clang_createIndex(0, 0); const char *filename = "Node.h"; CXTranslationUnit TU = clang_parseTranslationUnit(i
int main(int argc, char *argv[]) {
CXIndex index = clang_createIndex(0, 0);
const char *filename = "Node.h";
CXTranslationUnit TU = clang_parseTranslationUnit(index, filename, NULL, 0, NULL, 0, CXTranslationUnit_None);
CXCursor rootCursor = clang_getTranslationUnitCursor(TU);
clang_visitChildren(rootCursor, printVisitor, NULL);
clang_disposeTranslationUnit(TU);
clang_disposeIndex(index);
return 0;
}
参观者:
CXChildVisitResult printVisitor(CXCursor cursor, CXCursor parent, CXClientData client_data) {
CXSourceRange range = clang_getCursorExtent(cursor);
CXSourceLocation startLocation = clang_getRangeStart(range);
CXSourceLocation endLocation = clang_getRangeEnd(range);
CXFile file;
unsigned int line, column, offset;
clang_getInstantiationLocation(startLocation, &file, &line, &column, &offset);
printf("Start: Line: %u Column: %u Offset: %u\n", line, column, offset);
clang_getInstantiationLocation(endLocation, &file, &line, &column, &offset);
printf("End: Line: %u Column: %u Offset: %u\n", line, column, offset);
return CXChildVisit_Recurse;
}
但是,输出显示了一些奇怪的部分:
Start: Line: 99 Column: 9 Offset: 3160
End: Line: 99 Column: 122 Offset: 3273
Kind: A field (in C) or non-static data member (in C++) in a struct.
Filename: (null)
这是从哪里来的
删除pragma时,不会发生任何更改。对于要解析的完全空的头文件,也会发生同样的情况
在得到“第一条语句”或“第一个表达式”节点之前,是否必须绕过AST中找到的所有节点?我得到的TU如下所示: CXTranslationUnit TU=clang_parseTranslationUnit(索引,0,argv,argc, 0, 0, CXTranslationUnit(无) 然后,我运行您的测试用例(Node.h),得到结果: 起始:行:3列:1偏移:14 结束:行:6列:2偏移:67 起始:行:4列:5偏移:32 结束:行:4列:14偏移:41 起始:行:5列:5偏移:47 结束:行:5列:22偏移:64 起始:行:5列:12偏移:54 结束:行:5列:16偏移:58 我认为结果是正确的。你可以这样试试
Start: Line: 99 Column: 9 Offset: 3160
End: Line: 99 Column: 122 Offset: 3273
Kind: A field (in C) or non-static data member (in C++) in a struct.
Filename: (null)