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

2024-09-24 02:26:20 发布

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

我试着把一个C程序按功能块分开。例如

我尝试使用regex库并尝试按(){拆分。但是没有用。不知道从哪里开始。你知道吗

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))

Tags: 函数import程序列表forstringifreg
2条回答

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

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

a demo on regex101.com。这将与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))

解析源代码是一项相当困难的任务。软件如Bison在C、C++和java中生成源代码解析器(C代码可以在Python中使用),但是你不可能创建正则表达式来解决这个问题(至少是容易的)。你知道吗

相关问题 更多 >