【发布时间】:2015-02-24 11:03:36
【问题描述】:
我想解析一个目录树,找到每个*.cpp,然后剔除函数,给我留下模拟。
解析树没问题。取出内脏比较困难。
我目前正在将源文件读入一个字符串并逐个字符地循环它。如果我看到一个封闭的圆括号 ) 并且下一个非空白字符是一个左括号 { 那么我有一个函数 start。
然后我可以停止写入输出,同时计算左大括号和右大括号,直到在函数末尾找到匹配的大括号 }。
代码很糟糕,有漏洞,并且不断变化,因此几乎不值得发布。
是否有一个优雅的解决方案,可能涉及正则表达式,它将删除文件中所有函数的主体,保持其余部分不变?
如果它可以检测到函数的类型并生成一个返回语句,那么我可以自己解决这个问题。
【问题讨论】:
-
“剔除功能”,多么好的程序!
-
正则表达式在嵌套块中很糟糕,例如
{}和()。相关问题:stackoverflow.com/questions/1444961/… -
C++ 不是常规语言,而是上下文无关语言。你需要一个合适的解析器,正则表达式会让你的麻烦更大。
-
如果您使用处理递归的新正则表达式模块,这是可能的(并且使用精心设计的模式很快)。但是你不能用 re 模块做到这一点。您是否搜索过 C++ 解析器模块是否已经存在,或者您是否尝试过词法分析器模块?但是,改进您已经编写的代码可能是一种方式。
-
@Lucho:很容易避免这种情况,以避免将某些内容包含在字符串中。您只需要在之前匹配它们即可。
标签: python regex python-3.x mocking