使用Clang ASTMatcher为语句发出匹配非嵌套 我试图用CLANASTMACHER的C++代码匹配单选的循环,也就是说,源文件低于 for(int x=0;x<10;x++){ } for(int y=0;y<10;y++){for(int z=0;z<5;z++){}}

使用Clang ASTMatcher为语句发出匹配非嵌套 我试图用CLANASTMACHER的C++代码匹配单选的循环,也就是说,源文件低于 for(int x=0;x<10;x++){ } for(int y=0;y<10;y++){for(int z=0;z<5;z++){}},c++,clang,C++,Clang,我相信这应该行得通,但是不行。匹配项包括(int y=0;y的,我同意您发布的内容看起来应该是有效的-但是它无法在clang query 3.8和4.0中产生预期的结果。如果您尝试绑定中间匹配项的变量,它似乎是有效的 铿锵查询代码(为清晰起见,请键入set,删除要运行的换行符) 对于一个等效示例: int main() { for(int x=0;x<10;x++){ } for(int y=0;y<10;y++){for(int z=0;z<5;z++){}

我相信这应该行得通,但是不行。匹配项包括(int y=0;y的
,我同意您发布的内容看起来应该是有效的-但是它无法在clang query 3.8和4.0中产生预期的结果。如果您尝试绑定中间匹配项的变量,它似乎是有效的

铿锵查询代码(为清晰起见,请键入set,删除要运行的换行符)

对于一个等效示例:

int main()
{ 
    for(int x=0;x<10;x++){ }
    for(int y=0;y<10;y++){for(int z=0;z<5;z++){}}
}
intmain()
{ 

对于(int x=0;x我同意您所发布的内容看起来应该是有效的-但是它无法在clang query 3.8和4.0中产生预期的结果。如果您尝试绑定中间匹配的变量,它似乎是有效的

铿锵查询代码(为清晰起见,请键入set,删除要运行的换行符)

对于一个等效示例:

int main()
{ 
    for(int x=0;x<10;x++){ }
    for(int y=0;y<10;y++){for(int z=0;z<5;z++){}}
}
intmain()
{ 

对于(int x=0;xYes)来说,你是对的,奇怪的是,除非(hasAgentor(forStmt())、除非(hasGenderant(forStmt()))
也不起作用,但当我在两者之间绑定一些东西时,例如,
StatementMatcher forStmtMatcher=forStmt(hasAgentor(forStmt())、hasLoopInit(declStmt)(hasingledecl(varDecl()
也不起作用,但当我绑定介于两者之间的东西时,例如,
语句匹配器forStmtMatcher=forStmt(除非(hasascentor(forStmt())),hasLoopInit(declStmt(hasSingleDecl().bind(“init”)),除非(hassentranent(forStmt())
它可以正常工作。那里一定有一些bug
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.