首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用pycparser编辑C函数声明

使用pycparser编辑C函数声明
EN

Stack Overflow用户
提问于 2020-01-06 07:56:52
回答 1查看 174关注 0票数 0

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

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

代码语言:javascript
复制
void f(int a, int b, int c) { ... }

变成类似这样的东西:

代码语言:javascript
复制
void f(int a, int b, int c, int hiddenArg) { ... }

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

我需要使用pycparser来做到这一点,但是一旦我读完它,我就找不出正确的方法来编辑它。有没有一种合适的方法来解决我没有做到的事情(或者任何方式)?

EN

回答 1

Stack Overflow用户

发布于 2020-04-16 11:21:12

作为修改AST的示例,下面将更改函数声明,使其具有新的参数:

代码语言:javascript
复制
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以类似的方式修改对此函数的调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59605265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档