仓库源文

上周开了两个支线,一是在整理和消化至今用到的正则表达式时,调研用中文 API 让正则表达式更易读写;二是基于一本编程入门书籍开始检验木兰当前发布版本的实用性。

正则表达式 API

如木兰中字符串插值部分用到的正则表达式 r'(\")((?<!\\)\\\1|.)*?\1',用设想中的 API 表达:

分段(双引号)
  .分段(
    任一(
      序列(反斜杠, 引用分段(1)).前面不是(反斜杠),
      序列(非换行字符)
    )
  ).若干().不贪()
  .引用分段(1)

现在仍在技术验证和文档完善中,另开了个 gitee 项目,欢迎在 issue 中提意见建议。

文字冒险游戏

刚到手了《Make Your Own Python Text Adventure: A Guide to Learning Programming》一书,将它的例程用木兰语言重写并改为中文标识符,一方面看看已重现的木兰功能是否足够编写新手入门教程,顺便对之前小结的木兰与 Python 的语法对比进行补充。下面代码在木兰发布版本 0.0.15.0 运行通过(由原书第八章例程改写):

type 武器 {
  func $__str__ {
    return $名称
  }
}

type 石块 : 武器 {
  func $石块 {
    $名称 = "石块"
    $描述 = "拳头大的岩石,砸起来很顺手。"
    $伤害 = 5
  }
}

type 匕首 : 武器 {
  func $匕首 {
    $名称 = "匕首"
    $描述 = "带些锈的小匕首,比石块更危险。"
    $伤害 = 10
  }
}

type 锈剑 : 武器 {
  func $锈剑 {
    $名称 = "锈剑"
    $描述 = "有点年头的宝剑,尚能一用。"
    $伤害 = 20
  }
}

func 玩 {
  库存 = [匕首(),'金币(5)','面包棍']
  println("逃出生天!")
  loop {
    输入 = 获取命令()
    if ['n', 'N'].__contains__(输入) {
      println("往北!")
    } elif ['s', 'S'].__contains__(输入) {
      println("往南!")
    } elif ['e', 'E'].__contains__(输入) {
      println("往东!")
    } elif ['w', 'W'].__contains__(输入) {
      println("往西!")
    } elif ['i', 'I'].__contains__(输入) {
      println("库存:")
      for 家伙 in 库存 {
        println('* ' + str(家伙))
      }
    } else {
      println("不懂!")
    }
  }
}

func 获取命令 {
  return input('行动:')
}

玩()

书中第九章「异常」的例程,需要木兰的 try...catch 语法,而此语法尚未在本项目重现

特此召集有意了解木兰编程语言实现细节的同仁,一同研究重现。参考它的逆向工程,代码量在数十行,另需额外编写测试等。当然,这也在悬赏范围之内