【发布时间】:2020-05-27 02:56:37
【问题描述】:
我被分配了一个任务/分配来编写一个程序,该程序读取类似 c 的代码(具有指定的语法,所以我不需要担心 cmets 等中的代码)并从循环体内部删除不必要的计算以外。它可以创建新的变量。就像在这个例子中一样:
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# 解析器库。开始可能是this post
-
为什么?任何体面的编译器都会在某个阶段或另一个阶段做到这一点。你被要求在这里写一段好的编译器。这是一项远非微不足道的任务。你有 3-5 个月的时间来做吗?