在多行中匹配C函数签名的python脚本

2024-10-06 09:43:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读取.c文件,以查找其中定义的函数,并计算每个函数中的行数。 我的问题是我无法查找跨越多行的函数名/签名。 我有.c文件的函数名列表,我正在将此列表的函数名与.c文件中的函数名进行匹配,以便进一步处理。在

例如,My.c文件是:

 1.   int main(
 2.           void
 3.          )

这里的主签名跨越三行。在

我有一个函数列表:

^{pr2}$

如何将“intmain(void)”与.c文件中的多行main匹配? 我想在函数匹配后开始计算行数。在


Tags: 文件函数列表定义mainmyintvoid
2条回答

如果定义与“完全”匹配,则可以使用regex:

int\s+main\s*\(\s*void\s*\)\s*;

其中\s*表示零个或多个whitechar,\s+一个或多个whitechar。在

要将其用于多行搜索,可以将其定义为:

^{pr2}$

我所说的“完全”是指它与函数定义不匹配

int main();

(无效省略)

通过这种方法,您可以找到函数的起始位置,然后进行简单的字符扫描计数{和},记住忽略注释和忽略字符和字符串常量

我建议您为C语言编写一个简单的解析器。在

ANTLR book中的一个示例与您所追求的类似。在

Pyparsing是一个非常好的Python库,用于编写解析器。在

这里是一个ansic的解析器:http://code.google.com/p/pycparser/(使用另一个Python解析器库Ply)编写。在

相关问题 更多 >