pycparser 仅访问 else if-else 语句

pycparser visit else only of an if-else statement

我正在使用 pycparser 来解析一些 C 代码。具体来说,我需要代码的某些部分,pycparser 中包含一些访问者,例如 visit_If 来访问 "If" 部分的代码。但是,我在访问 if-else 语句的 'else' 部分时遇到问题。

示例 1:

if (x == 0)
{
    // some statements
}
else
{
    // some statements -> I only need all codes under else
}

示例 2:

if (x == 0)
    // a statement
else
    // a statement -> I only need all codes under else

在 pycparser 中这怎么可能?

If 节点有一个 iffalse 子节点,它是原始代码中的 else 子句。例如,see the C code generatorpycparser 的一部分):

def visit_If(self, n):
    s = 'if ('
    if n.cond: s += self.visit(n.cond)
    s += ')\n'
    s += self._generate_stmt(n.iftrue, add_indent=True)
    if n.iffalse:
        s += self._make_indent() + 'else\n'
        s += self._generate_stmt(n.iffalse, add_indent=True)
    return s

这是访问 If 节点并访问其所有子节点的一个很好的例子。