pycparser посещение else только оператора if-else - PullRequest
0 голосов
/ 16 сентября 2018

Я использую pycparser для разбора кода на Си.В частности, мне нужны определенные части кода, включенные в pycparser, для некоторых посетителей, таких как visit_If для посещения «If» разделов кода.Однако у меня возникают проблемы при посещении 'else' части оператора if-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 голосов
/ 17 сентября 2018

Узел 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 и доступа ко всем его дочерним узлам.

...