Regex,用于从C++代码中提取函数

Regex for extracting functions from C++ code

本文关键字:提取 函数 代码 C++ 用于 Regex      更新时间:2023-10-16

我有示例C++代码(http://pastebin.com/6q7zs7tc)我必须从中提取函数名称以及函数所需的参数数量。到目前为止,我已经写了这个正则表达式,但它对我来说并不完美

(?![a-z])[^:,>,.]([a-z,A-Z]+[_]*[a-z,A-Z]*)+[(]

使用正则表达式无法可靠地解析C++。

事实上,您不能用弱解析技术来解析它(请参阅为什么不能用LR(1)解析器来解析C++?)。如果您希望从源文件中可靠地提取这些信息,则需要经过时间测试的C++解析器;看见https://stackoverflow.com/a/28825789/120163

如果你不在乎你的提取过程是不稳定的,那么你可以使用正则表达式,也许还可以使用一些额外的技巧。启发式提取的关键问题是匹配各种括号,例如,[…],<…>(这对轮班操作员来说不太管用)和{…}。括号匹配要求您保留一堆可见的括号。在存在宏和预处理器条件的情况下,括号匹配可能会失败。