0

我需要编写一个 Python 程序来解析 C 源代码文件并在每个函数声明的末尾添加一个隐藏参数。

更准确地说,我需要更改如下内容:

void f(int a, int b, int c) { ... }

变成这样的东西:

void f(int a, int b, int c, int hiddenArg) { ... }

显然,我还需要编辑其他函数对该函数的所有调用。

我需要使用 来执行此操作pycparser,但是一旦阅读了 AST,我就无法弄清楚编辑 AST 的正确方法。有没有我想念的正确方法(或任何方法)?

4

1 回答 1

0

作为修改 AST 的示例,这里将函数声明更改为具有新参数:

class ParamAdder(c_ast.NodeVisitor):
    def visit_FuncDecl(self, node):
        ty = c_ast.TypeDecl(declname='_hidden',
                            quals=[],
                            type=c_ast.IdentifierType(['int']))
        newdecl = c_ast.Decl(
                    name='_hidden',
                    quals=[],
                    storage=[],
                    funcspec=[],
                    type=ty,
                    init=None,
                    bitsize=None,
                    coord=node.coord)
        if node.args:
            node.args.params.append(newdecl)
        else:
            node.args = c_ast.ParamList(params=[newdecl])

这会改变所有功能。显然,您可以在访问者中添加一个条件来仅更改您感兴趣的某些功能。

您可以使用类似的方式修改对此函数的调用visit_FuncCall

于 2020-04-16T03:21:12.207 回答