0

我正在寻找使用 clang-query 获取构造函数最后一行的行号,有人知道如何到达那里吗?

我有很多源文件要通过,并且需要更新构造函数。我花时间尝试用正则表达式解析源文件,它适用于很多极端情况。所以这是列表中的下一项。

我尝试在网络上搜索和堆栈溢出,但我找不到太多,并且对语言解析器的工作方式有点迷茫。此外,我使用这个工具http://ce.steveire.com/作为m cxxConstructorDecl()我对 clang-query 的输入,但它为我提供了包含“MyClass”的 4 行的匹配项,它只给了我一行构造函数的第一行。任何帮助表示赞赏!

class MyClass {       // The class
  public:             // Access specifier
    int myNum;        // Attribute (int variable)

    MyClass (int in_val);

};

// Constructor definition outside the class
MyClass::MyClass(int in_val) {

  myNum = in_val;
  // <<< this line >>>
}
4

1 回答 1

0

我发现这个很棒的教程帮助我更深入地了解了这个 AST 世界。https://devblogs.microsoft.com/cppblog/exploring-clang-tooling-part-2-examineing-the-clang-ast-with-clang-query/

所以最后,我的问题的答案是: m cxxConstructorDecl(has(compoundStmt().bind("my_constructor_statement")))

产生了这个结果。请注意,行号和列号不同,因为我将 fake.cpp 拆分为头文件。

CompoundStmt 0x20b9e18 </home/ME/fake.cpp:4:30, line:7:1>
`-BinaryOperator 0x20b9df8 <line:6:3, col:11> 'int' lvalue '='
  |-MemberExpr 0x20b9d90 <col:3> 'int' lvalue ->myNum 0x20b9628
  | `-CXXThisExpr 0x20b9d80 <col:3> 'class MyClass *' implicit this
  `-ImplicitCastExpr 0x20b9de0 <col:11> 'int' <LValueToRValue>
    `-DeclRefExpr 0x20b9dc0 <col:11> 'int' lvalue ParmVar 0x20b98b0 'in_val' 'int'
于 2021-03-11T15:30:35.977 回答