1

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

4

1 回答 1

0

If节点有一个iffalse子节点,它是else原始代码中的子句。例如,参见 C 代码生成器(部分pycparser):

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

于 2018-09-17T12:56:03.093 回答