replacing for loop with while in C

时间:2018-04-20 01:10:09

标签: c for-loop while-loop converter

i am trying to make a code that searchs for a "for" loop in the input file, replace it with its "while" equivalent, leaving the rest untouched, and create a new output file with the new code, i need ideas and some help, i dont exactly expect someone else to do it. (remember, there may be another for loop inside a for loop) ex.

for(i=0;i<10;i++) {
    some stuff here;
}

to

i=0;
while(i<10) {
the exact same stuff here;
i++;
}

or

for(X;Y;Z) {
K;
}

to

A;
while(Y) {
K;
Z;
}

3 个答案:

答案 0 :(得分:1)

您需要考虑“继续”语句。 如果您遇到以下代码怎么办?

for (i=0;i<10;i++)
{
    if (i%2) continue;
    print_i();
}

您的解决方案可以实现:

i=0;
while (i<10)
{
    if (i%2) continue;
    print_i();
    i++;
}

运行死循环。

答案 1 :(得分:1)

您是否熟悉使用grepsed等Unix实用程序?如果是这样,你可以使用这些工具用shell脚本,python脚本或者带有系统调用的另一个C程序为你重写你的C程序。

要隔离for循环,请逐行逐字地读取程序,直到找到单词“for”,此时应检查下一个字符是空格还是左括号。然后,开始搜索大括号;如果你到达一个开括号,增加一个名为braces的变量。如果你到达另一个开放式大括号,再次增加braces,同样,如果你到达一个右大括号,则递减braces。当braces等于0时,您已到达此循环的末尾。

现在有了sed甚至是cut的有趣部分(如果您不熟悉使用正则表达式,这可能会有所帮助:https://unix.stackexchange.com/questions/159367/using-sed-to-find-and-replace

C中的“for”循环用分号分隔其条件;因此,使用cut提取在保留字for之后找到的第一个和第二个分号之间的字段。这将成为while循环的条件。

重复此过程以提取第一个字段(通常是您的索引变量)和第三个字段(如何处理索引变量;通常,这将是while循环中的最后一行)。< / p>

循环的主体应保持不变。请注意,虽然这是一个通用过程,但很难考虑每种可能的情况 - 您的for循环可能正在使用迭代器,或基于范围的循环,或广泛的其他用途。但是如果您熟悉它们,那么一般过程可以很好地使用Unix实用程序。

答案 2 :(得分:0)

为了准确地解析和编辑c文件,你可以编写一个与clang集成的工具,这样就可以像其他文件一样整理了#c;工具。取决于您想要投入多少精力来实现自动化。