删除函数内容的 Pythonic 方法

Posted

技术标签:

【中文标题】删除函数内容的 Pythonic 方法【英文标题】:Pythonic way to remove a function's contents 【发布时间】:2015-02-24 11:03:36 【问题描述】:

我想解析一个目录树,找到每个*.cpp,然后剔除函数,给我留下模拟。

解析树没问题。取出内脏比较困难。

我目前正在将源文件读入一个字符串并逐个字符地循环它。如果我看到一个封闭的圆括号 ) 并且下一个非空白字符是一个左括号 那么我有一个函数 start。

然后我可以停止写入输出,同时计算左大括号和右大括号,直到在函数末尾找到匹配的大括号

代码很糟糕,有漏洞,并且不断变化,因此几乎不值得发布。

是否有一个优雅的解决方案,可能涉及正则表达式,它将删除文件中所有函数的主体,保持其余部分不变?

如果它可以检测到函数的类型并生成一个返回语句,那么我可以自己解决这个问题。

【问题讨论】:

“剔除功能”,多么好的程序! 正则表达式在嵌套块中很糟糕,例如 ()。相关问题:***.com/questions/1444961/… C++ 不是常规语言,而是上下文无关语言。你需要一个合适的解析器,正则表达式会让你的麻烦更大。 如果您使用处理递归的新正则表达式模块,这是可能的(并且使用精心设计的模式很快)。但是你不能用 re 模块做到这一点。您是否搜索过 C++ 解析器模块是否已经存在,或者您是否尝试过词法分析器模块?但是,改进您已经编写的代码可能是一种方式。 @Lucho:很容易避免这种情况,以避免将某些内容包含在字符串中。您只需要在之前匹配它们即可。 【参考方案1】:

您可以使用解析器,clang api 提供它并且您有 python 绑定:https://github.com/llvm-mirror/clang/tree/master/bindings/python

这篇文章可以给你一些关于如何使用它的见解:http://szelei.me/code-generator/

还有一些包装器可以让您的工作更轻松,例如:https://github.com/sztomi/cmonster

【讨论】:

以上是关于删除函数内容的 Pythonic 方法的主要内容,如果未能解决你的问题,请参考以下文章

应用三参数函数“减少”列表的pythonic方法是啥?

有条件返回函数的最pythonic方法是啥

模块函数 vs 静态方法 vs 类方法 vs 无装饰器:哪个成语更 Pythonic?

如何在python中删除路径前缀?

哪个 Python 条件返回语句是最 Pythonic 的?

多个构造函数:Pythonic 方式? [复制]