从循环中删除不必要的计算



我被赋予了一个任务/辅助来编写一个程序,该程序读取类似 c 的代码(使用指定的语法,所以我不需要担心注释中的代码等(并从循环体内部到外部删除不必要的计算。它可以创建新变量。就像这个例子一样:

Input:
for (i=1; i<100; i++)
{ b[i] = c[i] *a * 135.8; }
Output:
float __gen1 = a*135.8;
for (i=1; i<100; i++)
{ b[i] = c[i] *___gen1; }

我决定最好的方法是运行一个"优化"递归函数,这样处理嵌套循环就很容易了。 但是我应该如何阅读循环中的代码并决定要移出什么,以及如何将其移出循环体之外呢?

我正在使用 C#。

首先,您需要某种方法来从代码创建解析树。有一些工具可以让您从类 c 语言的语法构建词汇分析器。你将使用哪一个取决于你实现它的语言,如果你使用的是java,那么你可能需要使用这个:https://en.wikipedia.org/wiki/JavaCC

获得树后,您可以遍历它并查找循环内的表达式,并且仅使用未在当前循环中写入的文本或变量。这些可以退出循环。

最新更新