木兰编程语言重现:通过玩三岁游戏完善语言功能

2020年08月08日

某个号称三岁以上就可以玩的桌游,抽象之后的基本问题就是在一个区域中如何摆放三种形状(朝向随意)。

比如区域:

三种形状(短折,长折,一字),各种朝向如下:

这是迄今为止用木兰语言编写的最复杂的实用代码,包括一个递归搜索,长约 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 比较熟悉,欢迎一道研究。

展开阅读全文
0 收藏
分享
加载中
精彩评论
这种中英文混合起来的代码看起来是真的又乱又难懂,用中文编程就真的会让国人觉得更简单易懂吗?
2020-08-09 01:51
8
举报
关键字还是英文,这个貌似现在支持Unicode编码的都可以做到这种半中文编程
2020-08-08 19:26
6
举报
语言实现还是基于Python解释器么?
2020-08-08 19:28
5
举报
这回给楼主点个赞,坚持是可贵的品质。
2020-08-10 14:02
1
举报
我自己看着舒服。
你的英文代码拿出来看看有多好懂?
2020-08-09 02:43
1
举报
最新评论 (14)
看起来挺有意思的
2020-08-10 18:58
0
回复
举报
这回给楼主点个赞,坚持是可贵的品质。
2020-08-10 14:02
1
回复
举报
标点符号区分中英文吗?频繁的切输入法能习惯吗?
2020-08-10 09:36
0
回复
举报
输入法选项“中文下使用英文标点”。
还用了“中文代码快速补全” VS Code 插件 #https://gitee.com/Program-in-Chinese/vscode_Chinese_Input_Assistant#
易读最重要。
2020-08-10 10:51
0
回复
举报
变长参数不就是参数模式的重复判断。
2020-08-09 14:08
0
回复
举报
应该是, 但是没琢磨出来怎么用. Python 里是这样:
def myFunction(*args):
print(str(args))

木兰里可以这样定义函数:
func echo(...) {
}
但是如果里面同样 print(args) 就报不认 args
2020-08-09 14:40
0
回复
举报
print是对str(args)重复,不是对args。底层就是个数组args[str]。用args是个地址,不能标明所指向的类型。底层是*[args]。
2020-08-10 12:56
0
回复
举报
私信交流吧。一时没明白要义。
2020-08-10 13:47
0
回复
举报
这种中英文混合起来的代码看起来是真的又乱又难懂,用中文编程就真的会让国人觉得更简单易懂吗?
2020-08-09 01:51
8
回复
举报
我自己看着舒服。
你的英文代码拿出来看看有多好懂?
2020-08-09 02:43
1
回复
举报
语言实现还是基于Python解释器么?
2020-08-08 19:28
5
回复
举报
源码都是py文件必然是基于python
2020-08-09 09:44
0
回复
举报
关键字还是英文,这个貌似现在支持Unicode编码的都可以做到这种半中文编程
2020-08-08 19:26
6
回复
举报
木兰本来就不是中文语法。用中文标识符作例程有啥好奇怪的?
2020-08-10 12:54
0
回复
举报
更多评论
14 评论
0 收藏
分享
在线直播报名
返回顶部
顶部