Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用算法将冗余代码优化为循环_Javascript_Loops_Optimization_Refactoring_Automated Refactoring - Fatal编程技术网

Javascript 用算法将冗余代码优化为循环

Javascript 用算法将冗余代码优化为循环,javascript,loops,optimization,refactoring,automated-refactoring,Javascript,Loops,Optimization,Refactoring,Automated Refactoring,我正在为相当基本的脚本语言编写一个转换器,但是它似乎缺乏用于循环的能力。例如,这使得代码非常混乱和冗余,而不是: for(int i = 0; i < 5; i++) { ECHO Hello World! SLEEP 500 } 等等。基本上,我把这个脚本转换成C++,有可能减少所有这些重复调用吗?我曾想过循环查找重复的代码,但问题是我无法处理这样的代码: ECHO 1 SLEEP 500 ECHO 2 SLEEP 500 ECHO 3 SLEEP 500 ECHO 4

我正在为相当基本的脚本语言编写一个转换器,但是它似乎缺乏用于循环的能力。例如,这使得代码非常混乱和冗余,而不是:

for(int i = 0; i < 5; i++) {
    ECHO Hello World!
    SLEEP 500
}
等等。基本上,我把这个脚本转换成C++,有可能减少所有这些重复调用吗?我曾想过循环查找重复的代码,但问题是我无法处理这样的代码:

ECHO 1
SLEEP 500
ECHO 2
SLEEP 500
ECHO 3
SLEEP 500
ECHO 4
有没有更简单的方法来识别这些模式,或者我需要深入研究更复杂的东西,比如神经网络?

我不知道“更简单”这个词

您需要的是一个克隆检测器,用于检测参数化克隆。这将查找重复的克隆序列,这样,可以实例化具有参数的克隆以生成精确的代码实例

示例循环包含的是参数化克隆的重复实例:

   ECHO n
   SLEEP 500
因此,序列的第一个抽象是:

   for n in {1,2,3,4}
      ECHO n
      SLEEP 500
序列上的for循环很容易转换为:

  for n=1,4 step 1
      ECHO n
      SLEEP 500
这就是我认为您要生成的代码

所以你们的问题是得到一个参数克隆检测器


看这个。这些工具并不容易构建。但是,如果您构建了一个,那么如果您可以将脚本语言解析为AST,那么这将为您提供核心参数克隆。然后,您可以执行您认为有用的其他优化。

转换器应该做什么,只需执行它们?或者它真的需要输出可读的代码吗?它需要输出执行的代码。那么,我就不关心优化它了。让C++编译器关心这个。或者您对展开循环的代码大小有什么问题吗?这将是主要问题,在这种情况下,我的代码大小非常有限。
  for n=1,4 step 1
      ECHO n
      SLEEP 500