首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[Clang RecursiveASTVisitor]如何区分'If‘语句和'Else If’语句?

问[Clang RecursiveASTVisitor]如何区分'If‘语句和'Else If’语句?
EN

Stack Overflow用户
提问于 2021-09-22 08:29:37
回答 1查看 93关注 0票数 0

我正在使用clang的RecursiveASTVisitor来解析一些C代码。我重写visitStmt(),并希望区分'If‘语句和'Else If’语句。

示例:

代码语言:javascript
复制
    if(a > 0){
      XXX
    }
    else if(a == 0){
      YYY
    }
    else{
      ZZZ
    }

在visitStmt()中,我使用:

代码语言:javascript
复制
    if(isa<IfStmt>(S))

判断语句是否为IfStmt。

,但是我怎么知道这个语句是'Else If‘而不是'If'?

我想插入不同的存根(XXX在'If‘和YYY在'Else If’下)。

ps:我不是说英语的人。请原谅我的拙劣的快递。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-22 09:39:49

在C中没有特定的else if语句,因为

代码语言:javascript
复制
if (a) {
  ...
} 
else if (b) {
  ...
} 
else {
  ...
}

是隐藏的(就AST而言),如下所示

代码语言:javascript
复制
if (a) {
  ...
} 
else { 
  if (b) {
    ...
  } 
  else {
    ...
  }
}

所以第一个片段是“隐藏嵌套”,因为第一个else的主体只包含一个if ... else语句,所以您可以省略它周围的{}。最后一个else不属于第一个if,而是属于第二个if。

因此,要确定您是否有一个else if,您可能要做的是在树中跳一步,并检查当前节点的父节点是否是else语句,而if是否是该父节点的第一个(或唯一)语句--其他语句。

还有其他语言(例如VB)具有If .. ElseIf .. Else结构。但C不知道。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69280701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档