服务器之家:专注于服务器技术及软件下载分享
分类导航

服务器资讯|IT/互联网|云计算|区块链|软件资讯|操作系统|手机数码|百科知识|免费资源|头条新闻|

服务器之家 - 新闻资讯 - 软件资讯 - 木兰编程语言重现:通过玩三岁游戏完善语言功能

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

2020-08-09 23:35开源中国吴烜2020 软件资讯

某个号称三岁以上就可以玩的桌游,抽象之后的基本问题就是在一个区域中如何摆放三种形状(朝向随意)。 比如区域: 三种形状(短折,长折,一字),各种朝向如下: 这是迄今为止用木兰语言编写的最复杂的实用代码 ,包括

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

比如区域:

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

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

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

这是迄今为止用木兰语言编写的最复杂的实用代码,包括一个递归搜索,长约 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 等等

代码统计下面是几个主要部分的代码行数统计,格式为:两周前 ->本周。

测试

test 语法树 . py,确保生成的语法树与原始版本一致:67

木兰测试用例:1228 -> 1590

运行测试 . py,检验所有木兰测试代码片段:151 -> 154

未变

实现:2130 -> 2183

演示高亮 . py:100

功用 / 反馈信息 . py:45

分析器 / 语法分析器 . py:916 -> 944

分析器 / 语法树 . py,功用 / 调试辅助 . py,包括对 ast 库的中文封装:284 -> 234 + 56 = 290

分析器 / 词法分析器 . py:187 -> 190

环境 . py,加载木兰模块:89 -> 97

中 . py,主程序:35 -> 36

未变

下一步由于还有相当部分的木兰语言功能尚未补全,而实践证明编写较复杂实例的开销相对较大,于是打算首先尽快补完语言功能和测试用例。

现在个别语言功能上卡了壳(比如变长参数),主要是看不出如何使用。如果有兴趣并且对 Python 比较熟悉,欢迎一道研究。

延伸 · 阅读

精彩推荐