我正在尝试使用 libclang 构建一个小型解析程序。
要解析的源文件(Node.h):
#pragma once
struct Node {
int value;
struct Node *next;
};
Run Code Online (Sandbox Code Playgroud)
主程序简单地调用 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;
}
Run Code Online (Sandbox Code Playgroud)
访客:
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 …Run Code Online (Sandbox Code Playgroud)