libclang只定义了5种类型的令牌:
是否有可能获得有关令牌的更详细信息?例如,对于以下源代码:
struct Type;
void foo(Type param);
Run Code Online (Sandbox Code Playgroud)
我希望输出如下:
我还需要将这些实体映射到文件位置.
首先,您可能需要一些关于解析如何工作的背景知识.关于编译器的教科书将是一种有用的资源.首先,将文件转换为一系列令牌; 它为您提供标识符,标点符号等.执行此操作的代码称为词法分析器.然后,解析器运行; 这会将令牌列表转换为AST(结构化声明/表达式等).
clang确实跟踪声明和表达式的各个部分,但不是你所描述的方式.对于给定的函数声明,它会跟踪函数名称的位置和参数列表的开头之类的内容,但它会根据文件中的位置保留这些内容,而不是令牌.
A CXToken
只是一个象征; 除了列出的五种类型之外,没有任何其他相关的语义信息.(您可以获取令牌的实际文本clang_getTokenSpelling
,并使用位置clang_getTokenExtent
.) clang_annotateTokens
为您提供CXCursor
s,它可以让您检查相关的声明.
请注意,libclang API不会公开某些细节; 如果您需要更多细节,可能需要使用clang的C++ API.
归档时间: |
|
查看次数: |
1081 次 |
最近记录: |