如何按功能块拆分 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))
我正在尝试按功能块拆分 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))