gpt4 book ai didi

c++ - libclang:如何获取 token 语义

转载 作者:可可西里 更新时间:2023-11-01 16:04:35 25 4
gpt4 key购买 nike

libclang 只定义了 5 种类型的标记:

  • CXToken_Punctuation
  • CXToken_Keyword
  • CXToken_Identifier
  • CXToken_Literal
  • CXToken_Comment

是否可以获得有关 token 的更详细信息?例如,对于以下源代码:

struct Type;
void foo(Type param);

我希望输出是这样的:

  • 结构 - 关键字
  • 类型 - 类型名称
  • >; - 标点符号
  • void - 类型/关键字
  • foo - 函数名
  • ( - 标点符号
  • Type - 函数参数的类型
  • param - 函数参数名
  • ) - 标点符号
  • >; - 标点符号

我还需要将这些实体映射到文件位置。

最佳答案

首先,您可能需要了解一些有关解析工作原理的背景知识。关于编译器的教科书将是一个有用的资源。首先,文件被转换成一系列的 token ;为您提供标识符、标点符号等。执行此操作的代码称为词法分析器。然后,解析器运行;这会将标记列表转换为 AST(结构化声明/表达式/等)。

clang 确实会跟踪声明和表达式的各个部分,但不会按照您描述的方式进行跟踪。对于给定的函数声明,它会跟踪函数名称的位置和参数列表的开头等内容,但它会根据文件中的位置而不是标记来保留这些内容。

CXToken 只是一个 token ;除了您列出的五种类型之外,没有任何其他关联的语义信息。 (您可以使用 clang_getTokenSpelling 获取 token 的实际文本,使用 clang_getTokenExtent 获取 token 的位置。)clang_annotateTokens 为您提供 CXCursors,它可以让你检查相关的声明。

请注意,libclang API 并未公开一些细节;如果您需要更多详细信息,您可能需要改用 clang 的 C++ API。

关于c++ - libclang:如何获取 token 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36766570/

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