本项目旨在重现木兰编程语言的语法和功能,已开源在码云。所有例程演示的语法可用原始的木兰可执行文件ulang0。2。2。exe检验。如发现有异烦请告知,定将礼谢。 前两天用木兰调用pygame库实现了个井字棋棋盘界面。期间遇到了一些问题,先小结一下。1生态兼容问题 注:解决方法限于个人至今对木兰和Python的了解。如有高招,烦请指教!1。1元组(tuple) python中很常用的结构,可以如下初始化:t(1,2)t(1,2)t2,3t(2,3) 但木兰中好像没找到类似的简便方法。幸好与python相似,函数返回多项时就会打包成元组,因此暂时这样定义函数:func多项2(a,b){returna,b}func多项3(a,b,c){returna,b,c}。。。 之后支持变长参数时,就可以合并为一个函数了。1。2如何引用type属性 下面是pygame的常见操作,检查pygame。event的type:foreventinpygame。event。get():ifevent。typepygame。QUIT: 但木兰中的type是类型定义的关键词,因而如果仍使用。type会报错。刚遇到这一问题时,颇为震惊,以为发现了木兰的一个大硬伤,不过还好python还有一个getattribute(type)可用。另一种方法用在这里就无法获得type值:funcgetType(个体){for属性,值in个体。dict。items(){return值if属性type}} 大概因为这个type是个property(木兰中的应变属性),如果是普通属性如下:type人{func人(名){type名}} 上面两种方法就都可用。1。3键in字典 python中判断字典是否包含某键,推荐使用键in字典,集合也类似。木兰中的in关键词并不支持这种操作,也没找到其他语法支持。现在只找到调用contains()这一方式2本周重现功能:字符串插值 python的字符串插值功能比如f{行号}。0可以简化字符串拼接。这几天重现了木兰的类似功能,如下对比,比拼接方式简洁不少:〔词性行:str(行)列:str(起)str(止)〕,内容:内容拼接〔词性行:行列:起止〕,内容:内容插值 除了表达式格式,木兰还支持(表达式)格式。至于为何支持两种格式,暂时想到的一种使用场景是带有字符的字符串插值,比如a某变量b,那么某变量就可以用():a3print(a(a)a)a3aprint(aaa)3aa 这有个实现细节的困惑。在插值的语法树节点创建时,使用的是ast。Mod()运算符。但这不是求余操作么?这个Mod有详细说明文档吗?附录:代码量统计 主要部分的代码行数统计,格式为:上次现在。木兰代码量编辑器,实现与测试都是木兰代码:333木兰测试用例,包括部分实用小程序:2160 Python代码量(包括测试部分):23962425分析器语法分析器。py:958986分析器词法分析器。py:198测试运行所有。py,检验所有木兰测试代码片段:185环境。py,定义全局方法:157分析器语法成分。py,从语法分析器中提取出来的枚举常量:79未变分析器语法树。py:178交互。py,交互环境(REPL):138功用反馈信息。py:49中。py,主程序:41分析器错误。py:17测试unittest语法树。py,确保生成的语法树与原始版本一致:67测试unittest交互。py,交互环境相关测试:28