木兰编程语言重现:通过玩三岁游戏完善语言功能
某个号称三岁以上就可以玩的桌游,抽象之后的基本问题就是在一个区域中如何摆放三种形状(朝向随意)。
比如区域:
三种形状(短折,长折,一字),各种朝向如下:
这是迄今为止用木兰语言编写的最复杂的实用代码,包括一个递归搜索,长约 150 行,测试约 70 行。其中一个类如下:
细节和算法有很大改进空间,欢迎指教。
期间根据需要复现了木兰的如下功能:
== 操作符重载
type 点 { func $点(横, 纵) { self.横, self.纵 = 横, 纵 } operator == (另一点) { return self.横 == 另一点.横 and self.纵 == 另一点.纵 } }
可指定函数返回类型
type Person { { name = "小白" } func $__init__(name) { self.name = name } } func shout(id): Person { return Person(id) } print(shout("Mulan1").name)
根据范围取子列表
比如 a[1:3], a[1:]
添加内置函数
集合(set)、断言(assert)、all、str/int 等等
代码统计
下面是几个主要部分的代码行数统计,格式为:两周前->本周。
- 测试
- 木兰测试用例:1228 -> 1590
运行测试.py
,检验所有木兰测试代码片段:151 -> 154- 未变
test语法树.py
,确保生成的语法树与原始版本一致:67
- 实现:2130 -> 2183
分析器/语法分析器.py
:916 -> 944分析器/语法树.py
,功用/调试辅助.py
,包括对 ast 库的中文封装:284 -> 234 + 56 = 290分析器/词法分析器.py
:187 -> 190环境.py
,加载木兰模块:89 -> 97中.py
,主程序:35 -> 36- 未变
演示高亮.py
:100功用/反馈信息.py
:45
下一步
由于还有相当部分的木兰语言功能尚未补全,而实践证明编写较复杂实例的开销相对较大,于是打算首先尽快补完语言功能和测试用例。
现在个别语言功能上卡了壳(比如变长参数),主要是看不出如何使用。如果有兴趣并且对 Python 比较熟悉,欢迎一道研究。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
EightRoes V1.0.4 发布,插件式开发框架
EightRoes插件式开发框架 一个基于 Spring Boot、Shiro、 JWT、Mybatis Plus、Vue、Ant-Design-Vue 的前后端分离的插件式快速开发框架 EightRoes 的开发机制是基于插件的可插拔的松耦合体系。在软件行业中普遍存在一种现象:软件企业特别是产品型的软件企业往往倾向于劝说客户去适应产品的现有功能,而比较抗拒对产品中的功能做客户化修改。这种现象的出现并不全部是修改本身的工作量的原因(大部分情况下修改的工作量实际上非常小),而在于这种修改要求软件企业为每一客户保有一个产品的版本库分支,将来对此客户的任何响应都要基于此一分支,此一分支也不便于和主版本同步演进,这就会带来比较大的管理成本。特别是熟悉此一分支的骨干人员离职之后,对于客户的服务水平将会急剧下降。 针对此一问题,EightRoes 构建了一套插件体系,并为此体系提供了基于 IDEA 的开发插件,使得客户的个性化需求通过可插拔的插件来实现。特别地,EightRoes 允许通过在插件中声明扩展点和扩展项来覆盖和扩展产品中原有的功能,但又不影响产品本身的升级。通过这种方式,每个项目只需要...
- 下一篇
BeeCP-2.5.1 发布,一款高性能 JDBC 连接池
1:基本介绍 小蜜蜂连接池是一款高性能的JDBC连接池,下面是与主流连接池的性能测试对比图 测试机器:CPU: I3-7100,内存: 8G,操作系统:Win7_64 性能测试包: https://github.com/Chris2018998/BeeCP/blob/master/doc/other/HikariCP-benchmark_SafeClose.zip 2:版本内容(BeeCP-2.5.1) 1:优化池中等待/传递逻辑,性能略有提升 2:修复连接的Readonly未重置的问题 3:修复networkTimeout检查的警告的问题 3:版本下载 <dependency> <groupId>com.github.chris2018998</groupId> <artifactId>BeeCP</artifactId> <version>2.5.1</version> </dependency> Starter同步更新 <dependency> <...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS6,CentOS7官方镜像安装Oracle11G
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7设置SWAP分区,小内存服务器的救世主