Skip to main content

木兰编程语言重现

Project description

Gitee Go 所有测试

前言

没错,这就是那个木兰。

2020 年一月第一时间提出知乎问题「木兰」编程语言有什么特色?的正是本人,这是那段暴风骤雨的亲历记

目标

悬赏完成之前,将努力向重现「木兰」编程语言的目标迈进。系列技术文章集结在知乎专栏并在开源中国同步更新。

运行

!必需 Python 3.7 !源码文件需 UTF-8 编码

通过 pip install ulang 安装木兰。

命令行交互环境

$ 木兰
木兰向您问好
更多信息请说'你好'
> 和 = 0
> for 数 in 1..10 {
>> 和 += 数
>> }
> print(和)
55

IDE 辅助

VS Code 语法高亮插件

vsc截图

【原型】自带在线编辑器

自带IDE截图

运行木兰源码文件

使用.ul后缀才可被引用

$ 木兰 测试/运算/四则运算.ul
4

下面 例程 调用了 草蟒 的中文 API:

using * in 海龟

颜色("黄色", "红色")
开始填充()
for 转角 in 0..4 {
  前进(200); 右转(144)
}
结束填充()
主循环()
/* 需安装 Python 库“草蟒”: grasspy-modules */

中文报错信息

交互环境中仅提示出错所在位置简要信息:

> func a(n) { return n1+1 }
> func b(n) { print(n) }
> b(a(2))
 😰 请先定义'n1'再使用, 见第1行

运行源码时,可见调用各层的详细信息。如果错误发生在其他文件,可见文件名:

$ 木兰 测试/错误处理/引用模块.ul
 😰 取列表内容时,索引超出范围
“测试/错误处理/下标越界函数.ul”第2行:print([][0])
调用层级如下
见第3行:a()

参考例程在此

其中实用为较接近实用的部分。另外木兰代码编辑器也用木兰代码编写。

所有例程演示的语法可用原始的木兰可执行文件 ulang-0.2.2.exe 检验。如发现有异烦请告知,定将同样礼谢

新手入门

如果无编程经验,请入此门

功能说明

随着逐渐缩小与原版木兰的差距,将补充语言语法规则。用户手册尚待更新。为调试方便,报错等等反馈信息会逐渐中文化

交互环境功能说明在此

开发

实现简介

木兰源代码转换为 Python 的中间表示(AST)后执行,可实现各种语法设计与周边功能,并可方便地利用 Python 现有生态。

新手开发者请看开发流程与项目结构简介

使用 Python 3.7 的最新小版本。 Mac 和 Linux 下全部测试通过;windows 下测试大多数通过。如使用 3.8,语法树测试将失败。

为提高开发维护效率,本项目中尽量使用中文标识符。包括语法规则、Python 代码等等。

木兰语言部分依赖的第三方 Python 包:

本地运行

$ python -m 木兰

运行测试

$ python -m unittest 测试.unittest.交互 测试.unittest.语法树 测试.unittest.所有用例 测试.unittest.报错

为检验与原始木兰可执行文件功能一致,在 Windows 下运行;其他系统下,会对从 PyPI 安装的版本进行测试:

$ python 测试/运行所有.py

许可证

GNU GPLv3

版本历史介绍

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ulang-0.0.16.1.tar.gz (32.4 kB view hashes)

Uploaded Source

Built Distribution

ulang-0.0.16.1-py3-none-any.whl (50.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page