用中文写 Python。 不用英文关键字、不用缩进、不用冒号、不用花括号。
周道是一套完整的中文编程语言原型——它使用现代中文句法、数学表达和中文标点,先解析为独立 AST,再转译到标准 Python 执行。它借用 CPython 的运行时与生态,但不创造自己的虚拟机。
定义斐波那契(序号)如下:
如果序号 <= 1,就以序号为所得;
以斐波那契(序号-1)+斐波那契(序号-2)为所得。
运行如下:
设索引为0,当索引<15时,一直显示斐波那契(索引),并使索引加1。
编程语言的语法本质上是给人类读的协议。英文关键词对非英语母语者构成了一道隐形的认知门槛——不是不能学,而是每次阅读都需要在"英文关键词 → 语义"之间做一次映射。
周道尝试一个简单的假设:
如果用完整的母语句法来表达逻辑,阅读代码的认知负荷会不会更低?
这不是要取代 Python,也不是否定英文编程的价值。周道是一个语言原型,用来探索这个假设的真实边界。
定义统计(文本)如下:
设行列表为文本的分割(【\n】);
设行数为长度(行列表);
从行列表中,每取一项记作行,就显示行;
以行数为所得。
运行如下:
设结果为统计(【第一行\n第二行\n第三行】)。
显示结果。
设置信号灯类别,包括状态,默认为【红】。
定义信号灯类别的切换()如下:
如果自己的状态等于【红】,就使自己的状态变为【绿】;
不然如果自己的状态等于【绿】,就使自己的状态变为【黄】;
不然使自己的状态变为【红】。
运行如下:
设灯为信号灯()。
灯的切换()。
灯的显示状态()。
定义验证年龄(年龄)如下:
如果年龄<0,就报错【年龄不得为负】,错误类型是值出错;
如果年龄>150,就报错【年龄超过上限】,错误类型是值出错;
以年龄为所得。
定义处理(编号、年龄)如下:
尝试设用户为查询用户(编号);
设验证为验证年龄(年龄);
如果错误类型是键出错,就显示【未找到用户】;
如果错误类型是值出错,就显示【参数无效】;
如果出错,就原样报出当前错误。
定义范围(上限)如下:
设i为0;
当i小于上限时,一直依次给出i,并使i加1。
定义过滤偶数(来源)如下:
从来源中,每取一项记作数,就(如果数余2等于0,就依次给出数)。
定义加倍(来源)如下:
从来源中,每取一项记作数,就依次给出数乘2。
运行如下:
设流水线为范围(10);
设偶数流水线为过滤偶数(流水线);
设加倍流水线为加倍(偶数流水线);
从加倍流水线中,每取一项记作结果,就显示结果。
设列表为[3、1、4、1、5]。
列表的追加(9)。
列表的排序()。
列表的反转()。
设副本为列表的复制()。
列表的移除(1)。
显示列表。
显示副本。
引入Python模块《math》。
从Python模块《math》中引入 sqrt。
运行如下:
设结果为sqrt(9)。
显示结果。
pip install -e . # 安装周道
# 运行
python -m 周道 projects/p1-text-processor/main.zd
# 仅查看生成的 Python 代码
python -m 周道 projects/p1-text-processor/main.zd --emit
# 仅检查语法
python -m 周道 projects/p1-text-processor/main.zd --check完整示例集在
projects/目录下,共 10 个渐进式项目,从文本处理到异步编程全覆盖。
python -m 周道 # 显示帮助
python -m 周道 file.zd # 运行
python -m 周道 file.zd --emit # 仅输出 Python 代码
python -m 周道 file.zd --check # 仅检查语法
python -m 周道 file.zd -o out.py # 转译为 .py 文件| 句式 | 形式 | 说明 |
|---|---|---|
| 绑定 | 设甲为乙。 |
建立名称 |
| 空值 | 设甲没有值。 |
初始化为 None |
| 变更 | 使甲变为乙。 |
改变值 |
| 输出 | 显示甲。 |
打印 |
| 条件 | 如果甲,就乙,不然就丙。 |
if/elif/else |
| 循环 | 当甲时,一直乙。 |
while |
| 遍历 | 从甲中,每取一项记作乙,就丙。 |
for |
| 函数 | 定义甲(乙)如下: |
函数定义 |
| 异常 | 尝试甲,如果出错,就乙。 |
try/except |
| 模块 | 引入Python模块《json》 |
import |
| 类别 | 设置甲类别,包括乙。 |
class |
| 方法 | 甲的方法() → 甲的方法() |
方法调用 |
| 生成器 | 依次给出甲 |
yield |
完整的运算符、字面量和句式表见 语法索引。
- 不翻译 Python 关键词——不使用
定义对应def、返回对应return,而是寻找中文读者无需编程知识也能理解的完整句式 - 数学符号 + 汉语式双表层——
+ - * / =保留数学直觉,加 减 等于保留母语节奏,两者等价 - 设与使用别——
设用于建立,使用于改变 - 所得即结果——
以…为所得表达函数返回值 - 结构指称——
其姓名在遍历体内指向当前元素
源码 → Lexer → Parser → Surface AST → Lowering → Core IR
→ Semantic Analysis → Backend(AST / text)→ Python
两个执行后端:
- ast 后端(默认):直接构造 Python
ast.AST,带异常位置映射 - text 后端:字符串拼接,用于调试和差分对照
周道内置了中文命名的基础能力库,无需引入即可使用:
| 类别 | 函数 |
|---|---|
| 文件与路径 | 读取文本 写入文本 判断存在 建立目录 列出目录 |
| 文本处理 | 分割 替换 查找 计数 转为大写 转为小写 |
| 数据结构 | 排序 反转 追加 插入 移除 各键 各值 |
| 系统 | 执行命令 环境变量 目前目录 此刻时间 休眠 |
| 断言 | 断言相等 断言为真 断言抛出错误 |
完整列表见 stdlib.py。
周道/
├── 周道/ # 核心源码
│ ├── lexer.py # 词法分析器
│ ├── parser.py # 句法解析器
│ ├── lowering.py # 降低到 Core IR
│ ├── ast_backend.py # Python AST 后端(默认执行路径)
│ ├── semantic_analyzer.py # 语义分析
│ ├── runner.py # 运行器与 CLI
│ ├── stdlib.py # 中文标准库
│ └── ...
├── projects/ # 10 个渐进式示例项目
│ ├── p1-text-processor/ # 文本处理
│ ├── p2-multi-file/ # 多文件模块
│ ├── p3-state-machine/ # 红绿灯状态机
│ ├── p4-error-handler/ # 错误处理
│ ├── p5-generator-pipeline/# 生成器流水线
│ ├── p6-async/ # 异步消息
│ ├── p7-python-interop/ # Python 互操作
│ ├── p8-word-frequency/ # 词频统计
│ ├── p9-table-cleaner/ # CSV 清洗
│ └── p10-list-cleaner/ # 列表操作
├── tests/ # 验收测试
├── docs/ # 设计与规范文档
└── README.md
v0.0.10rc1 — 候选发布,非生产软件。
周道在 Python 3 的 Unicode 标识符支持和标准库之上构建。文件名、包名、变量名全面使用中文。