2024-10-06 09:43:03 发布
网友
我正在读取.c文件,以查找其中定义的函数,并计算每个函数中的行数。 我的问题是我无法查找跨越多行的函数名/签名。 我有.c文件的函数名列表,我正在将此列表的函数名与.c文件中的函数名进行匹配,以便进一步处理。在
例如,My.c文件是:
1. int main( 2. void 3. )
这里的主签名跨越三行。在
我有一个函数列表:
如何将“intmain(void)”与.c文件中的多行main匹配? 我想在函数匹配后开始计算行数。在
如果定义与“完全”匹配,则可以使用regex:
int\s+main\s*\(\s*void\s*\)\s*;
其中\s*表示零个或多个whitechar,\s+一个或多个whitechar。在
要将其用于多行搜索,可以将其定义为:
我所说的“完全”是指它与函数定义不匹配
int main();
(无效省略)
通过这种方法,您可以找到函数的起始位置,然后进行简单的字符扫描计数{和},记住忽略注释和忽略字符和字符串常量
我建议您为C语言编写一个简单的解析器。在
ANTLR book中的一个示例与您所追求的类似。在
Pyparsing是一个非常好的Python库,用于编写解析器。在
这里是一个ansic的解析器:http://code.google.com/p/pycparser/(使用另一个Python解析器库Ply)编写。在
如果定义与“完全”匹配,则可以使用regex:
其中\s*表示零个或多个whitechar,\s+一个或多个whitechar。在
要将其用于多行搜索,可以将其定义为:
^{pr2}$我所说的“完全”是指它与函数定义不匹配
(无效省略)
通过这种方法,您可以找到函数的起始位置,然后进行简单的字符扫描计数{和},记住忽略注释和忽略字符和字符串常量
我建议您为C语言编写一个简单的解析器。在
ANTLR book中的一个示例与您所追求的类似。在
Pyparsing是一个非常好的Python库,用于编写解析器。在
这里是一个ansic的解析器:http://code.google.com/p/pycparser/(使用另一个Python解析器库Ply)编写。在
相关问题 更多 >
编程相关推荐