zoukankan      html  css  js  c++  java
  • 2017-12-06 JavaScript实现ZLOGO子集: 单层循环功能

    前文JavaScript实现ZLOGO子集: 前进+转向的示例代码很累赘, 因此尝试实现基本的循环功能, 使得前面的11行代码缩减为7行:

    开始
      循环4次
        前进200
        左转144度
      到此为止
      前进200
    结束
    

    源码和在线演示地址同前文.

    修改的语法描述(圈3.g4)不多, 应该已经支持多层循环:

    声明 : 前进 | 转向 | 循环;
    
    循环 : '循环' T数 '次' 声明+ '到此为止' ;
    

    但实现上, 暂时先做了单层. 就是将循环体内的指令存放起来, 在循环结束时, 把它们按循环次数重复添加到最终的指令序列中:

    // TODO: 支持多层循环
    var 循环次数 = 0;
    var 当前循环的指令序列 = [];
    ...
    定制监听器.prototype.enter循环 = function(上下文) {
      循环次数 = parseInt(上下文.getChild(1).getText());
    }
    
    定制监听器.prototype.exit循环 = function(上下文) {
      for (var i = 0; i < 循环次数; i++) {
        for (var j = 0; j < 当前循环的指令序列.length; j++) {
          指令序列.push(当前循环的指令序列[j]);
        }
      }
      当前循环的指令序列 = [];
      循环次数 = 0;
    }
    
    定制监听器.prototype.exit前进 = function(上下文) {
      ...
      添加指令({名称: 常量_指令名_前进, 参数: parseInt(前进量)});
    };
    
    定制监听器.prototype.exit转向 = function(上下文) {
      ...
      添加指令({名称: 常量_指令名_转向, 参数: 角度});
    };
    
    function 添加指令(指令) {
      if (循环次数 > 0) {
        当前循环的指令序列.push(指令);
      } else {
        指令序列.push(指令);
      }
    }
    

    在实现多层循环之前, 打算先添加测试用例. 毕竟手动测试已经开始麻烦了.

  • 相关阅读:
    【44.64%】【codeforces 743C】Vladik and fractions
    【47.40%】【codeforces 743B】Chloe and the sequence
    Java Web整合开发(18) -- Struts 2.x 标签
    os、sys及shutil
    Linux 下模拟Http 的get or post请求(curl和wget两种方法)
    密码正则
    主键唯一键重复插入解决方法
    php验证是否是中文
    nginx找不到php文件
    cannot get gid for group ‘nobody’
  • 原文地址:https://www.cnblogs.com/program-in-chinese/p/10481026.html
Copyright © 2011-2022 走看看