上周开了两个支线,一是在整理和消化至今用到的正则表达式时,调研用中文 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
语法,而此语法尚未在本项目重现。
特此召集有意了解木兰编程语言实现细节的同仁,一同研究重现。参考它的逆向工程,代码量在数十行,另需额外编写测试等。当然,这也在悬赏范围之内。