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}, {名称: 常量_指令名_转向, 参数: 90}, {名称: 常量_指令名_前进, 参数: 50}], 初始前进角度), [{起点: 路点0, 终点: 路点1, 长度: 50}, {起点: 路点1, 终点: 路点2, 长度: 50}], "通过!" ); });
添加测试的过程中, 再次感受代码封装的重要性. 在测试目标接口中, DOM操作都需避免(比如document, window).
虽然已经添加了多层循环的代码分析部分测试用例, 但在实现时, 感觉需要语法树以便于支持更复杂的语法. 另外在现在的代码里, 已经开始需要拆分模块("定制监听器"比较杂乱).
下面需要调研语法树相关的JS库, 比如: ajaxorg/treehugger
另外, 发现TypeScript也可以利用Antlr: Creating ANTLR Applications in TypeScript - Dangl.Blog();
2017-12-09

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
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 &...
- 下一篇
日语编程语言"抚子"-第三版实现初探
前文《日语编程语言"抚子" - 第三版特色初探》仅对语言的语法进行了初步了解. 之前的语言原型实现尝试(如《编程语言试验之Antlr4+JavaScript实现"圈4"》)之后, 感觉有必要学习"抚子"的实现, 因为它也內建支持在线编程, 应该很有借鉴价值.开发环境配置 主要参考 kujirahand/nadesiko3. 运行"npm start"后访问"localhost:3000"就有如下开发环境界面: 它也支持生成基于Electron的可以本地运行的独立程序(在Mac下测试). 运行"npm run electron"后就看到与网络界面相同的程序界面. 感觉这个方式很合理. 之后希望尝试类似途径同时实现在线和本地开发环境. 它也提供一个Atom插件, 安装后(拷贝目录到~/.atom/packages下)在Atom中打开test.nako3测试文件就有语法高亮: 另: 运行"npm run test"时, 发现了一个关于时间处理的bug. 将继续跟进; 暂时没有发现断点调试等功能. 源码学习 在/src下, 源码文件不多, 分类如下, 连同基于源码和注释个人整理的简单介绍: 编...
相关文章
文章评论
共有0条评论来说两句吧...