我有一个大型文本文件,只包含伪编程语言中的函数定义。函数定义看起来像这样(它们可以像他们想要的那样复杂(深度包围等)。):
foo1 = FUNCTION() {
body
}
我使用C
- regex.h
程序和分组模式匹配。 fgets()
在while
循环中读取新行,直到文件结尾。每次regexec()
匹配foo1 = FUNCTION
行中的fgets()
时,我会从foo1
计算regmatch_t
,将其传递给sprintf()
并打开新文件与fopen(foo1, "wx")
。然后,所有以下行都将写入新打开的文件,直到regexec()
与新foon = FUNCTION() {}
匹配,并通过sprintf()
和fopen()
打开新文件。这是我想要保留的解决方案的一部分!
但该文件的作者在某些部分是草率的,而不是将函数的名称和它的定义关键字FUNCTION
放在同一行,他有时写道:
foo2 =
FUNCTION() {
body
}
目前我将此类函数视为未命名,并将其编写的文件分配为m_func
形式的名称,其中n
是运行索引。现在,m_func
(m-1_func
)之前的文件也将包含实际名称m_func
作为最后一行。鉴于至少m = 50
,复制和粘贴似乎是一件麻烦事。所以这里有一个问题:有没有办法实现我在一行上定义的函数所能达到的目标,这样我就可以匹配定义,然后以某种方式获取一行或两行之前的名称并创建一个基于通过fopen()
和sprintf()
?