我正在使用clang的RecursiveASTVisitor来解析一些C代码。我重写visitStmt(),并希望区分'If‘语句和'Else If’语句。
示例:
if(a > 0){
XXX
}
else if(a == 0){
YYY
}
else{
ZZZ
}在visitStmt()中,我使用:
if(isa<IfStmt>(S))判断语句是否为IfStmt。
,但是我怎么知道这个语句是'Else If‘而不是'If'?
我想插入不同的存根(XXX在'If‘和YYY在'Else If’下)。
ps:我不是说英语的人。请原谅我的拙劣的快递。
发布于 2021-09-22 09:39:49
在C中没有特定的else if语句,因为
if (a) {
...
}
else if (b) {
...
}
else {
...
}是隐藏的(就AST而言),如下所示
if (a) {
...
}
else {
if (b) {
...
}
else {
...
}
}所以第一个片段是“隐藏嵌套”,因为第一个else的主体只包含一个if ... else语句,所以您可以省略它周围的{}。最后一个else不属于第一个if,而是属于第二个if。
因此,要确定您是否有一个else if,您可能要做的是在树中跳一步,并检查当前节点的父节点是否是else语句,而if是否是该父节点的第一个(或唯一)语句--其他语句。
还有其他语言(例如VB)具有If .. ElseIf .. Else结构。但C不知道。
https://stackoverflow.com/questions/69280701
复制相似问题