删除函数内容的 Pythonic 方法
Pythonic way to remove a function's contents
我想解析一个目录树,找到每个 *.cpp
然后剔除函数,给我留下模拟。
解析树没问题。去内脏更难。
我目前正在将源文件读入一个字符串并逐个字符地遍历它。如果我看到一个闭合的圆括号 )
并且下一个非空白字符是一个左括号 {
那么我有一个函数 start.
然后我可以停止写输出,边走边计算左大括号和右大括号,直到我在函数结束时到达匹配的结束大括号 }
。
代码很糟糕,漏洞百出,而且不断变化,因此不值得发布。
是否有一个优雅的解决方案,可能涉及正则表达式,它将删除文件中所有函数的主体,其余部分保持不变?
如果它可以检测函数的类型并生成一个 return 语句,那就更好了,但如果需要,我可以自己弄清楚。
您可以使用解析器,clang api 提供了它并且您有 python 绑定:https://github.com/llvm-mirror/clang/tree/master/bindings/python
这篇文章可以让您了解如何使用它:http://szelei.me/code-generator/
还有一些包装器可以使您的工作更轻松,例如:https://github.com/sztomi/cmonster
我想解析一个目录树,找到每个 *.cpp
然后剔除函数,给我留下模拟。
解析树没问题。去内脏更难。
我目前正在将源文件读入一个字符串并逐个字符地遍历它。如果我看到一个闭合的圆括号 )
并且下一个非空白字符是一个左括号 {
那么我有一个函数 start.
然后我可以停止写输出,边走边计算左大括号和右大括号,直到我在函数结束时到达匹配的结束大括号 }
。
代码很糟糕,漏洞百出,而且不断变化,因此不值得发布。
是否有一个优雅的解决方案,可能涉及正则表达式,它将删除文件中所有函数的主体,其余部分保持不变?
如果它可以检测函数的类型并生成一个 return 语句,那就更好了,但如果需要,我可以自己弄清楚。
您可以使用解析器,clang api 提供了它并且您有 python 绑定:https://github.com/llvm-mirror/clang/tree/master/bindings/python
这篇文章可以让您了解如何使用它:http://szelei.me/code-generator/
还有一些包装器可以使您的工作更轻松,例如:https://github.com/sztomi/cmonster