我正在尝试在C++源文件中找到一个分配:

x = 10;

我正在使用libclang对其进行解析并遍历AST。有一个CXCursor_BinaryOperator代表二进制运算符。有没有一种方法可以确定它是赋值对象还是任何其他二进制运算符(例如+<=!=)?如果不是,那么如何确定表达式是否为赋值?

提前感谢。

最佳答案

以下代码可能对您有用:

  CXToken *tokens;
  unsigned numTokens;
  CXSourceRange range = clang_getCursorExtent(cursor);
  clang_tokenize(tu, range, &tokens, &numTokens);
  for(unsigned i=0; i<numTokens; i++) {
    CXString s = clang_getTokenSpelling(tu, tokens[i]);
    const char* str = clang_getCString(s);
    if( strcmp(str, "=") == 0 ) {
      /* found */
    }
    clang_disposeString(s);
  }
  clang_disposeTokens(tu, tokens, numTokens);

10-08 11:56