【问题标题】:locate constructor line number in cpp source with clang-query使用 clang-query 在 cpp 源代码中定位构造函数行号
【发布时间】:2021-06-08 18:35:54
【问题描述】:

我正在寻找使用 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 >>>
}

【问题讨论】:

    标签: c++ parsing constructor clang clang-query


    【解决方案1】:

    我发现这个很棒的教程帮助我更深入地了解了这个 AST 世界。 https://devblogs.microsoft.com/cppblog/exploring-clang-tooling-part-2-examining-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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2010-10-17
      相关资源
      最近更新 更多