- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 Clang ASTMatcher 匹配 C++ 代码中的单个 for 循环,即在如下源文件中
for(int x=0;x<10;x++){ }
for(int y=0;y<10;y++){for(int z=0;z<5;z++){}}
我只想匹配' for(int x=0;x<10<x++){ }
'
为此,我构建了一个匹配器:
StatementMatcher forStmtMatcher = forStmt(unless(anyOf(hasAncestor(forStmt()),hasDescendant(forStmt()))))
我认为这应该有效,但事实并非如此。匹配项包括 for(int y=0;y<10;y++)
这是我不想要的,如果我在 anyOf() 匹配器中交换条件的位置,它匹配 for(int z=0;z<5;z++)
相反,我也不想要。
有人可以解释原因或告诉我如何解决吗?
最佳答案
我同意您发布的内容看起来应该有效 - 但它无法通过 clang-query 3.8 和 4.0 产生预期的结果。如果您尝试绑定(bind)中间匹配项的变量,它似乎可以工作。
Clang 查询代码(为清晰起见,删除换行符以运行)
set bind-root false
match forStmt(
unless(hasAncestor(forStmt().bind('x'))),
unless(hasDescendant(forStmt().bind('y')))).bind('for')
一个等价的例子:
int main()
{
for(int x=0;x<10;x++){ }
for(int y=0;y<10;y++){for(int z=0;z<5;z++){}}
}
产生:
Match #1:
/vagrant/stackoverflow-ast-query/loops.cpp:3:5: note: "for" binds here
for(int x=0;x<10;x++){ }
^~~~~~~~~~~~~~~~~~~~~~~~
1 match.
看起来这可能是 AST 匹配器构造函数转换中的错误。
关于c++ - 使用 Clang ASTMatcher 发出匹配非嵌套 for 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39664565/
我正在编写一个使用 clang 作为前端并匹配一些 AST 节点的工具。 我按如下方式创建 ASTMatcher: void Rule_1_2_1::registerMatchers(MatchFin
我正在尝试获取所有 malloc使用 ASTMatcher 调用在 clang 中。这是代码示例: Finder.addMatcher( callExpr( hasPare
我正在尝试使用 Clang ASTMatcher 匹配 C++ 代码中的单个 for 循环,即在如下源文件中 for(int x=0;x<10;x++){ } for(int y=0;y<10;y++
我正在尝试创建一个匹配 typedef enum 和 typedef NS_ENUM 声明的 OCLint 规则,但收效甚微。我有一个 Objective-C 文件 (TestClass.m),其中包
我刚开始使用 ASTMatcher 并遵循教程中的代码 - https://github.com/peter-can-talk/cppnow-2017 .在这里,可以使用以下命令运行工具 clang-
我是一名优秀的程序员,十分优秀!