日语编程语言"抚子"-第三版实现初探
前文《日语编程语言"抚子" - 第三版特色初探》仅对语言的语法进行了初步了解. 之前的语言原型实现尝试(如《编程语言试验之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下, 源码文件不多, 分类如下, 连同基于源码和注释个人整理的简单介绍:
-
编译器主程序:
- nako3.js
- cnako.js: 支持命令行下运行
- enoko.js: 支持electron
- wnako3.js: 支持web browser-浏览器
-
分析器实现
- nako_prepare.js: 全半角字符处理; 特殊字符串处理, 比如{% raw %}{{{{{% endraw %}等
- nako_lexer.js: 对已经是全角的代码进行词法分析, 包括保留关键字, 分词器等等
- nako_parser_base.js: 显示语法错误, NakoParserBase类
- nako_parser_const.js: 定义运算符的优先级, 以及日语助词(?), 如'いて', 'えて'等等
- nako_parser3.js: 是NakoParserBase的扩展, 实施语法分析, 生成语法树
- nako_gen.js: 从语法树生成JS类
-
插件(功能库)
- plugin_browser.js: 浏览器相关功能封装成API, 如'言'是"window.alert"(对话弹窗)
- plugin_node.js: Node.js常用功能封装, 如'開'是"readFileSync"(打开文件)
- plugin_system.js: JavaScript本身常用API封装, 如"割余"是"a%b"(求余)
- plugin_turtle.js: 类似LOGO语言的基于"抚子"语言的脚本语言. 演示在ゼロからはじめてみる日本語プログラミング「なでしこ」(3) タートルグラフィックスでお絵かきしよう(その1)
-
其他
- index.js: 用npm模块方式使用"抚子"
- repl.nako3: 用"抚子"语言本身写的一个简单的对话执行环境
时间有限, 以后再对不同模块深入学习.
2017-12-22
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
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}, {名称: 常量...
- 下一篇
阿里云开放搜索实践,使用阿里云开放搜索来做网站站内搜索
阿里云的开放搜索已经做得很完善了,现在阿里云集成了开放搜索,只要定义好表结构,上传数据,就会自动生成索引,马上就可以搜索了,简直可以做个搜索引擎了。一起来看看。 阿里云开放搜索介绍及购买页 首先,创建一个应用 表结构很简单,就一个主键id,一个text字段msg 添加数据源,数据源可以是RDS数据库,可以是json上传,也可以上传文件,这里是上传文件: 文件格式是这样的,与表结构一致: [ { "fields": { "id": 124, "msg": "根据性jquery的对各种深度学习类型典利他型站点的调研而制定的一套具有一定扩展性jquery的结构化数据搜索方案,能覆盖该类型95%以上的数据属性,支持专属词表配置、排序公式定制,并提供良好的相关性、丰富的检索方式,以及多维度的过滤、排序及统计。用户可以通过选择模版的方式来节省定制工作量。" }, "cmd": "ADD" }, { "fields": { "id": 2, "msg": "搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池