javascript - 通过算法将冗余代码优化为循环

标签 javascript loops optimization refactoring automated-refactoring

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

for(int i = 0; i < 5; i++) {
    ECHO Hello World!
    SLEEP 500
}

用这种语言编写的脚本最终看起来像这样:

ECHO Hello World!
SLEEP 500
ECHO Hello World!
SLEEP 500
ECHO Hello World!
SLEEP 500
ECHO Hello World!
SLEEP 500
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

这是我认为您想要生成的代码。

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

查看此technical paper on how to implement a parametric cloned detector over abstract syntax trees 。这些不是容易构建的工具。但是,如果您构建一个,那么如果您可以将脚本语言解析为 AST,那么这将为您提供核心参数克隆。然后您可以进行您认为有用的其他优化。

关于javascript - 通过算法将冗余代码优化为循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23918909/

相关文章:

optimization - Sqlite subselect 比 distinct + order by 快得多

javascript - 我可以为此功能做更多优化吗?

相当于 MySQL 函数 SUBSTRING_INDEX() 的 JavaScript

javascript - Jquery .each 通过另一个 Div 中的 Div

Python - 如何嵌套文件读取循环?

javascript - 如何在同一索引处输出不同的数组javascript

需要 MySQL 查询优化

javascript - AJAX 在数据库中输入数据两次

javascript - 欧洲编号中的星期几

javascript - jquery next() 在 div 之外