pycparser仅访问if-else语句的else

时间:2018-09-16 13:24:55

标签: python python-3.x pycparser

我正在使用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中怎么可能?

1 个答案:

答案 0 :(得分:0)

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节点并访问其所有子节点的一个很好的例子。