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(指令); } }
在实现多层循环之前, 打算先添加测试用例. 毕竟手动测试已经开始麻烦了.
2017-12-06
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python爬虫入门教程 11-100 行行网电子书多线程爬取
行行网电子书多线程-写在前面 最近想找几本电子书看看,就翻啊翻,然后呢,找到了一个 叫做 周读的网站 ,网站特别好,简单清爽,书籍很多,而且打开都是百度网盘可以直接下载,更新速度也还可以,于是乎,我给爬了。本篇文章学习即可,这么好的分享网站,尽量不要去爬,影响人家访问速度就不好了 http://www.ireadweek.com/ ,想要数据的,可以在我博客下面评论,我发给你,QQ,邮箱,啥的都可以。 这个网站页面逻辑特别简单 ,我翻了翻 书籍详情页面 ,就是下面这个样子的,我们只需要循环生成这些页面的链接,然后去爬就可以了,为了速度,我采用的多线程,你试试就可以了,想要爬取之后的数据,就在本篇博客下面评论,不要搞坏别人服务器。 http://www.ireadweek.com/index.php/bookInfo/11393
- 下一篇
JavaScript实现ZLOGO子集: 测试用例
续前文《JavaScript实现ZLOGO子集: 前进+转向》. 在添加新功能之前, 先添加测试用例, 以应对日益复杂的代码. 选择使用QUnit编写运行测试用例. 暂时对比较复杂和I/O无关的部分进行测试. 一是代码分析部分: Antlr通过生成的分析器和定制的监听器, 对原始代码进行分析和生成指令序列的部分. 下面是对循环进行测试的一个用例: QUnit.test( "分析_循环_前进1", function( assert ) { assert.deepEqual( 分析("开始\n循环2次\n前进50\n到此为止\n结束\n").返回指令序列(), [{名称: 常量_指令名_前进, 参数: 50}, {名称: 常量_指令名_前进, 参数: 50}], "循环2次通过!" ); }); "生成路径表"将指令序列转换成路点序列(经过的转折点), 其中一个测试用例如下: QUnit.test( "生成路径表_前进_左转_前进", function( assert ) { assert.deepEqual( 生成路径表([{名称: 常量_指令名_前进, 参数: 50}, {名称: 常量...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- Mario游戏-低调大师作品
- MySQL8.0.19开启GTID主从同步CentOS8
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16