gpt4 book ai didi

parsing - libclang 解析生成错误的输出

转载 作者:行者123 更新时间:2023-12-01 06:45:56 24 4
gpt4 key购买 nike

我正在尝试使用 libclang 构建一个小型解析程序。

要解析的源文件(Node.h):

#pragma once

struct Node {
int value;
struct Node *next;
};

主程序 simple 调用 clang 解析器并遍历 AST 中的所有元素:
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)

这是从哪里来的?

删除编译指示时,没有任何变化。解析一个完全空的头文件也会发生同样的情况。

在得到“第一个语句”或“第一个表达式”节点之前,我是否必须绕过 AST 中所有找到的节点?

最佳答案

我得到了这样的 TU:

CXTranslationUnit TU = clang_parseTranslationUnit(Index, 0, argv, argc,
0, 0,
CXTranslationUnit_None);

然后我运行你的测试用例(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

我认为结果是正确的。你可以这样试试。

关于parsing - libclang 解析生成错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5470764/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com