如何按功能块拆分 C 程序?

How to split a C program by its function blocks?

我正在尝试按功能块拆分 C 程序。例如,

我尝试使用正则表达式库并尝试按 (){ 拆分。但是没有用。不知道从哪里开始。

string = """
int firt(){
    if () { 

    }
}

customtype second(){
    if () { 

    }
    for(){

    }
}
fdfndfndfnlkfe
    """

我希望结果是一个将每个功能块作为元素的列表:['int first(){ ... }', 'customtype second(){....}']

我尝试了以下但得到 None

import regex
import re

reg = r"""^[^()\n]+\([^()]*\)\s*
\{
    (?:[^{}]*|(?R))+
\}"""

print(regex.match(reg, string))

解析源代码是一项相当困难的任务。 Bison 等软件生成 C、C++ 和 Java 中的源代码解析器(C 代码可用于 Python),但您不太可能创建正则表达式来解决此问题(至少很容易)。

首先:不要 - 使用解析器。
其次,如果您坚持要查看 为什么 应该改用解析器,请看一下这种递归方法(它只适用于较新的 regex 模块):

^[^()\n]+\([^()]*\)\s*
\{
    (?:[^{}]*|(?R))+
\}

参见 a demo on regex101.com. This will break with comments that include curly braces


Python 这将是

import regex as re

reg = re.compile(r"""^[^()\n]+\([^()]*\)\s*
\{
    (?:[^{}]*|(?R))+
\}""", re.VERBOSE | re.MULTILINE)

for function in reg.finditer(string):
    print(function.group(0))