让Dumate更具需求,写了词句段篇编程语言 – 完整规范文档,然后让Deepseek提意见,这是最后一轮的情况。
文档
词句段篇编程语言 – 完整规范文档
版本:v1.3.7
日期:2026-06-09
状态:定稿(缩进定义块,无显式结束)
文档说明
本文档整合了词句段篇编程语言的完整设计,包括:
- 第一部分:理念与核心概念
- 第二部分:设计决策(33项)
- 第三部分:完整语法规范
- 第四部分:实现路线图
- 第五部分:潜在风险与缓解
- 第六部分:已知限制
- 第七部分:示例库(10个真实场景)
- 第八部分:中文编程语言语法对比研究
第一部分:理念与核心概念
一、核心理念
1.1 为什么不能只翻译关键字?
如果只是把 if → 如果、def → 定义函数,那只是:
- 输入变慢(拼音输入需要切换)
- 没有本质创新
- 无法超越现有语言
1.2 中文真正的优势
语义密度:中文可以用更少的字符表达更多的含义
英文: "Calculate the sum of two numbers and return the result"
中文: "计算两数之和并返回"
层级组织:词、句、段、篇天然形成编程层级
词 → 变量、操作符
句 → 语句(自带部分数据)
段 → 函数/代码块(自带上下文)
篇 → 模块/程序(整体逻辑)
1.3 三大核心创新
1. 数据携带
句子、段落可以自带数据,减少函数参数传递。
传统:def fibonacci(n): return … # 需要传参
中文:斐波那契第十项 # 数据内嵌
2. 上下文继承
段落自动继承父作用域的数据。
主程序:
学生列表为…
统计段:
# 自动继承"学生列表"
返回学生列表之长度
3. 语义密度
用更少的代码做更多的事。
Python(150字符):
def find_above_average(numbers):
avg = sum(numbers) / len(numbers)
return [n for n in numbers if n > avg]
中文(40字符):
列为一五十三七
求大于平均值之项
二、词句段篇层级
2.1 词级:基础构件
名词词(数据词)
数、列、表、典、串、图
动词词(操作词)
加、减、乘、除、并、交、差
设、取、增、删、改、查
形容词词(修饰词)
大、小、快、慢、整、浮
首、末、最
量词词(规模词)
个、项、条、行、列
2.2 句级:自带数据的语句
陈述句(赋值/计算)
定义甲等于三。
甲加等于五。
判断句(条件)
如果甲大于十那么乙等于真。
祈使句(操作)
打印甲。
输出列中之最大者。
疑问句(查询)
甲为何值?
列中有几项?
2.3 段级:自带上下文的代码块
《快速排序》段(列表):
如果列表长度小于二那么返回列表。
定义基准等于列表之中间项。
定义小列表等于列表过滤项小于基准。
定义大列表等于列表过滤项大于基准。
定义等列表等于列表过滤项等于基准。
返回《快速排序》(小列表) -> 等列表 -> 《快速排序》(大列表)。
2.4 篇级:完整程序逻辑
【学生成绩分析篇】
数据定义:
定义学生列表等于空列。
定义成绩字典等于空典。
核心流程:
第一章:数据加载
学生列表加载自学生CSV
第二章:数据分析
调用成绩统计段
第三章:报告生成
生成PDF报告
辅助段落:
成绩统计段:
…
结束。
第二部分:设计决策
本文档记录词句段篇编程语言的最终设计决策,共32项。
决策1:词句段篇边界
最终决策:单行不限动词数,多行必须用段或缩进块
规则
| 单行代码(无分号) | 句 | 可以包含多个动词(用逗号/并连接) |
| 多行代码 | 段或缩进块 | 必须用《》定义段落,或用缩进块 |
| 若…则: 内部 | 缩进块 | 属于条件语句的一部分,不算独立段落 |
示例
# 单行句(不限动词数)
计算三加五并打印结果。
# 多行必须分段
《数据处理》段():
读取文件。
过滤数据。
排序数据。
输出结果。
结束。
# 缩进块(不独立成段)
若结果大于十则:
打印大。
记录日志。
结束。
理由
- ✅ 用户无需记住"动词数≤3"的阈值
- ✅ 解析简单:以换行或句号为边界
- ✅ 符合人们日常书写习惯
决策2:数据携带机制
最终决策:默认只读继承 + 修改需显式声明 + –strict可选模式
默认模式(适合业务专家)
主程序:
甲 = 1
乙 = 2
《统计》段():
# 默认只读继承
总和 = 甲 + 乙 # 可以读取
# 父.甲 = 10 # 错误:未声明继承
结束。
《修改》段(继承: 甲): # 显式声明才能修改
父.甲 = 10
结束。
严格模式(适合大型项目)
# 编译选项:–strict
主程序:
甲 = 1
乙 = 2
《统计》段(使用: 甲, 乙): # 强制声明所有使用的外部变量
总和 = 甲 + 乙
返回总和
结束。
调用《统计》(使用: 甲, 乙) # 调用处也明确传入
理由
- ✅ 默认模式保持简洁性(业务专家友好)
- ✅ 严格模式保证清晰性(专业程序员友好)
决策3:段的作用域
最终决策:仅支持词法作用域,去掉动态继承
规则
- 段的父作用域在定义时确定
- 不支持动态作用域(避免复杂性)
- 如需传递上下文,显式传递上下文对象
示例
主程序:
甲 = 1
《修改》段(继承: 甲):
父.甲 = 2 # 永远修改主程序的甲
结束
《执行》段(操作):
甲 = 100 # 局部变量
操作() # 操作的父仍是主程序
结束
调用《执行》(《修改》)
打印甲 # 输出:2(主程序的甲被修改)
理由
- ✅ 行为可预测(调试容易)
- ✅ 简化语言核心(降低学习成本)
- ✅ 符合主流语言实践
决策4:标点符号规则
最终决策:换行即语句结束,标点可选,支持续行
基本规则
# 方式1:换行(推荐)
设甲为三
设乙为五
打印甲加乙
# 方式2:加标点(可选)
设甲为三。
设乙为五。
打印甲加乙。
# 方式3:分号分隔(一行多句)
设甲为三;设乙为五;打印甲加乙
# 等价于(三个独立行)
设甲为三
设乙为五
打印甲加乙
语法规则
决策16:动词连接符"并"的用法
最终决策:"并"同时支持自然语言连接和代码块连接两种用法
用法一:自然语言连接(句子内部)
用于连接一个句子中的多个动词,表示顺序执行或并列关系。
# 单行句中的"并"
计算三加五并打印结果。
# 等价于
计算三加五。
打印结果。
# 更复杂的例子
读取文件并解析数据并保存结果。
用法二:代码块连接(段落之间)
用于连接多个段落调用或数据结构,实现管道式处理。
# 连接段落调用
返回《快速排序》(小列表)并等列表并《快速排序》(大列表)。
# 连接数据结构
小列表并等列表并大列表。
# 管道式处理
原始数据并《过滤》并《排序》并《去重》。
语法规则
句子内部:动词1 + 宾语1 + 并 + 动词2 + 宾语2
- "并"作为连接词,表示动作的顺序或并列
- 所有动词属于同一个句子
段落之间:数据/调用1 + 并 + 数据/调用2 + 并 + 数据/调用3
- "并"作为操作符,连接多个数据或段落调用
- 形成管道式处理链
理由
- ✅ 符合中文自然语言习惯
- ✅ 语法简洁,无需额外关键字
- ✅ 上下文决定语义,解析器可区分两种用法
决策17:类型注解系统
最终决策:支持可选的类型注解,采用参数: 类型和-> 返回类型语法
类型注解语法
# 参数类型注解
《段名》段(参数1: 类型1, 参数2: 类型2):
…
结束。
# 返回类型注解
《段名》段(参数) -> 返回类型:
…
结束。
# 完整类型注解
《段名》段(参数1: 类型1, 参数2: 类型2) -> 返回类型:
…
结束。
# 多返回值类型注解
《段名》段(参数) -> (类型1, 类型2, 类型3):
…
结束。
内置类型
数 数值类型(整数或浮点)
整数 整数类型
浮数 浮点类型
串 字符串类型
列 列表类型
典 字典类型
集 集合类型
布尔 布尔类型
空 空类型
任意 任意类型
类型注解示例
# 简单类型
《平方》段(x: 数) -> 数:
返回x乘x。
结束。
# 复合类型
《处理列表》段(数据: 列表) -> 列表:
返回数据并《过滤》并《排序》。
结束。
# 字典类型
《获取配置》段(键: 串, 配置: 典) -> 任意:
返回配置[键]。
结束。
# 多返回值
《统计》段(数据: 列表) -> (数, 数, 数):
返回数据之最小值,数据之最大值,数据之平均值。
结束。
# 可选参数类型
《问候》段(名字: 串, 问候语: 串 = "你好") -> 串:
返回问候语连接名字。
结束。
类型检查规则
# 默认:不进行类型检查
python 编译器.py main.句
# 开启类型检查
python 编译器.py –type-check main.句
理由
- ✅ 渐进式类型系统(类似Python的Type Hints)
- ✅ 不强制要求类型注解(保持简洁)
- ✅ 专业程序员可使用类型检查(提高可靠性)
- ✅ 符合中文习惯(参数: 类型而非类型 参数)
决策18:注释语法(代码块风格)
最终决策:采用代码块语法(类似Markdown),支持多语言嵌入
基本语法
```注释
这是注释内容
可以跨越多行
### 支持的语言标签
```python 嵌入Python代码,可被执行
```bash 嵌入Shell命令,可被执行
```sql 嵌入SQL语句
```json 嵌入JSON数据
```yaml 嵌入YAML配置
示例
# 单行注释
```注释
这是一条注释
多行注释
这是一段
跨越多行的注释
暂时禁用的代码:
设甲为三
设乙为五
嵌入Python代码(可被执行)
import numpy as np
data = np.array([1, 2, 3])
print(data.mean())
嵌入Shell命令(可被执行)
cd yanlv-parser
python parser/simple_test.py
嵌入SQL语句
SELECT * FROM users WHERE age > 18
注释中可以使用任何字符(包括代码)
以下代码暂时禁用:
设甲为三。
设乙为五。
打印甲加乙。
### 与代码的区分
| 语法 | 用途 | 是否执行 |
|—–|——|———|
| ```注释 | 纯注释 | 否(忽略) |
| ```python | Python代码 | 是(可选执行) |
| ```bash | Shell命令 | 是(可选执行) |
| 其他标签 | 嵌入数据 | 视情况而定 |
### 理由
– ✅ 语法清晰明确,无歧义
– ✅ 支持多语言嵌入(扩展性强)
– ✅ 类似Markdown,学习成本低
– ✅ 避免小括号注释与分组表达式的歧义
—
## 决策19:符号双模式支持
**最终决策**:**支持中文符号和英文符号双模式,两者等价**
### 符号分类与模式
| 符号类型 | 中文符号 | 英文符号 | 是否等价 | 推荐用法 |
|———|———|———|———|———|
| **语义标点** | 。 | . | ✅ 是 | 中文优先(有语义意义) |
| | : | : | ✅ 是 | 中文优先(有语义意义) |
| | ; | ; | ✅ 是 | 中文优先 |
| | , | , | ✅ 是 | 可混用 |
| | ? | ? | ✅ 是 | 中文优先 |
| **辅助括号** | () | () | ✅ 是 | 英文优先(输入便捷) |
| | 【】 | [] | ❌ 否 | 中文独有(篇名标记) |
| **标记符号** | 《》 | 无 | ❌ 否 | 中文独有(段落名标记) |
| **运算符** | 加减乘除 | + – * / | ❌ 否 | 汉字优先(语义密度优势) |
### 双模式语法示例
方式1:全中文符号
《计算》段(甲:数,乙:数) -> 数: 返回甲加乙。 结束。
方式2:混合符号(推荐)
《计算》段(甲: 数, 乙: 数) -> 数: 返回甲加乙。 结束。
方式3:全英文符号
《计算》段(甲: 数, 乙: 数) -> 数: 返回甲加乙. 结束.
三种方式完全等价
### 详细规则
#### 1. 句号:`。` 与 `.` 等价
设甲为三。 # 中文句号 设甲为三. # 英文句号(等价)
#### 2. 冒号:`:` 与 `:` 等价
《计算》段(甲:数): # 中文冒号 《计算》段(甲: 数): # 英文冒号(等价)
#### 3. 逗号:`,` 与 `,` 等价
《计算》(甲,乙,丙) # 中文逗号 《计算》(甲, 乙, 丙) # 英文逗号(等价) 《计算》(甲,乙, 丙) # 混合使用(等价)
#### 4. 分号:`;` 与 `;` 等价
设甲为一;设乙为二 # 中文分号 设甲为一; 设乙为二 # 英文分号(等价)
#### 5. 小括号:`()` 与 `()` 等价
《计算》(甲,乙) # 中文括号 《计算》(甲, 乙) # 英文括号(等价) 《计算》(甲, 乙) # 混合使用(等价)
### 不等价的符号
以下符号有独特语义,不可替换:
| 符号 | 用途 | 说明 |
|—–|——|——|
| `《》` | 段落名标记 | 中文独有,无英文等价 |
| `【】` | 篇名标记 | 中文独有,无英文等价 |
| `加减乘除` | 汉字运算符 | 语义运算,不是符号替换 |
正确:段落名用书名号
《快速排序》段(列表)
错误:不能用英文引号替代
"快速排序"段(列表) # ❌ 语法错误
### 推荐风格
**官方推荐风格**:语义符号用中文,辅助符号用英文
《计算》段(甲: 数, 乙: 数) -> 数: 若甲大于乙则返回甲。 返回乙。 结束。
**风格特点**:
– 书名号`《》`:中文(独有特性)
– 冒号`:`:中文(有语义意义)
– 小括号`()`:英文(输入便捷)
– 逗号`,`:英文(分隔符无语义)
– 句号`。`:中文(语句结束有语义)
### 编辑器支持
建议编辑器插件提供以下功能:
1. **自动转换**:输入英文符号自动转换为推荐风格
– 输入`:` → 自动变成`:`(冒号)
– 输入`,` → 保持`,`(逗号推荐英文)
2. **风格检查**:检测不规范的符号使用并提示
3. **一键转换**:将代码统一为推荐风格
### 理由
– ✅ 降低输入门槛(用户可用习惯的符号)
– ✅ 保持风格统一(推荐风格明确)
– ✅ 兼容数学表达式(英文括号与数学符号兼容)
– ✅ 保留中文特色(书名号、篇名号等独有符号)
—
## 决策20:"并"的两种用法区分
**最终决策**:**明确区分"并"和"->"的语义,避免解析歧义**
### 问题背景
"并"可以连接句子内部的动词,也可以连接段落调用/数据,可能导致歧义:
读取文件并过滤数据并排序并输出。
这里存在两种可能的语义:
1. **顺序执行**:每个动词独立执行,不传递中间值
2. **管道式处理**:前一操作的结果作为下一操作的输入
### 解决方案
**明确区分两种操作符**:
| 操作符 | 语义 | 中间值传递 | 使用场景 |
|——-|——|———–|———|
| `并` | 顺序执行 | ❌ 无 | 句子内部动词连接 |
| `->` | 管道式处理 | ✅ 有 | 数据流转、段落调用 |
### 语法规则
#### 1. "并"用于顺序执行
顺序执行(无中间值传递)
读取文件并过滤数据并排序并输出。
等价于:
读取文件。 过滤数据。 排序。 输出。
**规则**:
– "并"后面的动词独立执行
– 不传递中间值
– 每个动词都是独立的语句
#### 2. "->"用于管道式处理
管道式处理(中间值传递)
数据 -> 《过滤》 -> 《排序》 -> 《输出》。
等价于:
临时1 = 《过滤》(数据) 临时2 = 《排序》(临时1) 《输出》(临时2)
**规则**:
– 前一操作的结果作为下一操作的输入
– 明确的数据流向
– 推荐用于段落调用链
### 示例对比
场景1:顺序执行多个独立操作
打开文件并读取内容并关闭文件。
场景2:管道式数据处理
数据 -> 《过滤》 -> 《排序》 -> 《去重》。
场景3:混合使用
读取数据。 数据 -> 《处理》 -> 《保存》。 打印完成信息并关闭程序。
### 理由
– ✅ 语义明确,无歧义
– ✅ 解析器实现简单
– ✅ 符合直觉("并"是并列关系,"->"是流向关系)
– ✅ 与函数式编程的管道操作符一致
—
## 决策21:符号风格配置与规范化工具
**最终决策**:**引入`.句样式`配置文件和格式化工具**
### 问题背景
用户可能随意混用中英文符号,导致:
– 代码库风格不一致
– 可读性下降
– 团队协作困难
### 解决方案
#### 1. 样式配置文件`.句样式`
```yaml
# .句样式
符号风格: 推荐 # 推荐 / 全中文 / 全英文
句号: 中文 # 中文 / 英文
冒号: 中文 # 中文 / 英文
逗号: 英文 # 中文 / 英文
括号: 英文 # 中文 / 英文
缩进: 2空格 # 2空格 / 4空格 / Tab
最大行宽: 80
导出排序: 是 # 是 / 否
2. 预设样式
| 推荐 | 中文 | 中文 | 英文 | 英文 | 平衡输入与风格 |
| 全中文 | 中文 | 中文 | 中文 | 中文 | 纯中文体验 |
| 全英文 | 英文 | 英文 | 英文 | 英文 | 程序员习惯 |
3. 工具支持
# 格式化代码(使用.句样式配置)
句格式化 main.句
# 使用指定样式
句格式化 –style 全中文 main.句
# 检查样式(不修改文件)
句样式检查 main.句
# 自动修复不规范用法
句格式化 –修复 main.句
# 输出统计
句格式化 –统计 main.句
# 输出:
# 已格式化 5 处符号
# 已修正 3 处缩进
# 已排序 2 个导出
4. 编辑器集成
VS Code插件功能:
- 保存时自动格式化
- 实时提示不规范用法
- 悬停显示推荐风格
- 快捷键一键格式化
PyCharm插件功能:
- 代码风格检查
- 自动修复
- 批量格式化
示例
格式化前:
《计算》段(甲:数,乙:数):
返回甲加乙.
结束.
格式化后(推荐样式):
《计算》段(甲: 数, 乙: 数) -> 数:
返回甲加乙。
结束。
理由
- ✅ 团队协作时保持风格一致
- ✅ 降低代码审查负担
- ✅ 用户可自定义偏好
- ✅ 工具自动化处理
决策22:类型注解中的外部库类型
最终决策:渐进式类型支持,外部库类型仅作文档用途
问题背景
当导入Python库时,类型注解如何处理外部类型?
import numpy
《处理》段(数据: numpy.ndarray) -> 列表:
…
结束。
解决方案
1. 渐进式类型支持
| 第一阶段 | v1.0(MVP) | 无类型检查 | – |
| 第二阶段 | v1.5 | 内置类型 | 编译时静态检查 |
| 第三阶段 | v2.0 | 外部库类型 | 仅文档用途 |
2. 内置类型(v1.5支持静态检查)
# 内置类型:编译时检查
《计算》段(甲: 数, 乙: 数) -> 数:
返回甲加乙。
结束。
# 类型错误示例
《计算》段(甲: 数, 乙: 数) -> 数:
返回甲加乙。
结束。
结果为《计算》参数"三"参数五。 # ❌ 类型错误:参数甲应为数,实际为串
3. 外部库类型(v2.0仅作文档)
# 外部库类型:仅作文档,不做静态检查
《处理》段(数据: numpy.ndarray) -> 列表:
返回数据转换为列表。
结束。
# 类型检查器输出
提示:外部库类型"numpy.ndarray"不参与静态检查(第5行)
4. 类型别名(可选)
# 定义类型别名
类型 数组 为 numpy.ndarray
类型 字典 为 dict
《处理》段(数据: 数组) -> 字典:
…
结束。
5. 类型检查命令
# v1.5:检查内置类型
句检查 main.句
# 输出:
# 检查通过:10个段落,23个类型注解
#
# 或:
# 错误:类型不匹配
# 位置:main.句 第15行
# 说明:参数"甲"期望类型"数",实际类型"串"
理由
- ✅ MVP阶段简化实现
- ✅ 逐步增加类型系统复杂度
- ✅ 外部库类型不阻塞编译
- ✅ 类型注解仍可用于IDE提示
决策23:代码块注释的执行语义
最终决策:代码块默认不执行,仅在特殊模式下可选执行
问题背景
代码块注释(如```python)是否参与程序执行?变量作用域如何互通?
解决方案
1. 默认行为:忽略代码块
| ```注释 | 忽略 | 纯注释 |
| ```python | 忽略 | 文档/示例 |
| ```bash | 忽略 | 文档/示例 |
| ```测试 | 忽略 | 测试代码 |
2. 可选执行模式
# 默认:忽略所有代码块
句运行 main.句
# 执行代码块(实验性功能)
句运行 –exec-codeblocks main.句
# 只执行测试代码块
句运行 –exec-tests main.句
3. 变量作用域:完全隔离
# 代码块中的变量不影响主程序
```python
x = 42
打印x。 # ❌ 错误:x未定义
**理由**:
– 避免引入Python运行时上下文
– 保持语言独立性
– 降低实现复杂度
#### 4. 测试代码块(v1.5支持)
《加法》段(甲: 数, 乙: 数) -> 数: 返回甲加乙。 结束。
《加法》参数三参数五应等于八。
《加法》参数零参数零应等于零。
```bash
# 运行测试
句测试 main.句
# 输出:
# 测试通过:2/2
# – 《加法》参数三参数五应等于八 ✓
# – 《加法》参数零参数零应等于零 ✓
理由
- ✅ MVP阶段实现简单
- ✅ 保持语言独立性
- ✅ 避免运行时复杂度
- ✅ 测试功能可选启用
决策24:篇内的段名唯一性与可见性
最终决策:段名在篇作用域内唯一,未导出的段为私有
问题背景
- 是否允许同名段?
- 如何处理重复定义?
- 如何控制段的可见性?
解决方案
1. 段名唯一性
规则:段名在篇作用域内必须唯一,不允许重复定义
【工具篇】
# ✅ 正确:段名唯一
《计算平均分》段(列表: 列表) -> 数:
…
结束。
《排序》段(列表: 列表) -> 列表:
…
结束。
# ❌ 错误:段名重复
《计算平均分》段(数据: 典) -> 数:
…
结束。
错误信息:
错误:段名重复
位置:工具篇.篇 第25行
说明:段名"《计算平均分》"在第10行已定义
2. 不支持重载
规则:即使参数不同,也不允许同名段
# ❌ 错误:不支持重载
《计算》段(甲: 数, 乙: 数) -> 数:
返回甲加乙。
结束。
《计算》段(甲: 串, 乙: 串) -> 串:
返回甲连接乙。
结束。
替代方案:使用不同名称
《计算数值》段(甲: 数, 乙: 数) -> 数:
返回甲加乙。
结束。
《计算文本》段(甲: 串, 乙: 串) -> 串:
返回甲连接乙。
结束。
3. 段的可见性
规则:
- 在导出列表中的段为公有,可被外部导入
- 未在导出列表中的段为私有,仅本篇内部使用
【工具篇】
导出 《计算平均分》
导出 《排序》
# 公有段:可被外部导入
《计算平均分》段(列表: 列表) -> 数:
…
结束。
# 公有段
《排序》段(列表: 列表) -> 列表:
…
结束。
# 私有段:仅本篇内部使用
《辅助函数》段(数据):
…
结束。
4. 导入规则
# main.句
# ✅ 正确:导入公有段
从工具篇导入 《计算平均分》, 《排序》
# ❌ 错误:导入私有段
从工具篇导入 《辅助函数》
# 错误:段"《辅助函数》"为私有,无法导入
理由
- ✅ 避免名称冲突
- ✅ 降低理解复杂度
- ✅ 明确的可见性控制
- ✅ 不引入重载复杂度
决策25:方法语法(v2.0可选特性)
最终决策:v2.0引入方法语法,v1.0保持函数式设计
问题背景
当前的数据类型+外部段落方式略显冗长:
《学生》数据类型:
姓名: 串
年龄: 数
成绩: 列表
结束。
《添加成绩》段(学生: 学生, 成绩: 数) -> 学生:
学生之成绩增加成绩。
返回学生。
结束。
解决方案
1. v1.0:保持函数式设计
当前方式:数据类型 + 外部段落
《学生》数据类型:
姓名: 串
年龄: 数
成绩: 列表
结束。
《获取简介》段(学生: 学生) -> 串:
返回连接(学生之姓名, ",", 学生之年龄, "岁")。
结束。
《添加成绩》段(学生: 学生, 成绩: 数) -> 学生:
学生之成绩增加成绩。
返回学生。
结束。
# 使用
张三为《学生》创建姓名"张三"年龄十八。
简介为《获取简介》参数张三。
张三为《添加成绩》参数张三参数九十二。
优点:
- 简单直观
- 无继承复杂度
- 类似Go语言设计
2. v2.0:引入方法语法(可选)
新语法:数据类型 + 方法定义
# 数据类型定义
《学生》数据类型:
姓名: 串
年龄: 数
成绩: 列表
结束。
# 方法定义
《学生》方法《获取简介》() -> 串:
返回连接(自我之姓名, ",", 自我之年龄, "岁")。
结束。
《学生》方法《添加成绩》(成绩: 数) -> 学生:
自我之成绩增加成绩。
返回自我。
结束。
# 使用
张三为《学生》创建姓名"张三"年龄十八。
简介为张三.获取简介。
张三.添加成绩九十二。
核心特性:
- 自我关键字:引用当前实例
- .操作符:调用方法
- 无继承体系:保持简单
3. 方法 vs 段落
| 定义位置 | 篇内任意位置 | 数据类型后 |
| 调用方式 | 《段名》(实例) | 实例.方法名() |
| 第一个参数 | 显式传递实例 | 隐式自我 |
| 返回值 | 任意 | 可返回自我支持链式调用 |
理由
- ✅ v1.0保持简单
- ✅ v2.0提供语法糖
- ✅ 不引入继承复杂度
- ✅ 类似Go语言的成功经验
决策26:MVP风险规避策略
最终决策:按优先级分层处理,高优先级风险在MVP阶段必须解决
风险优先级矩阵
| "并"用法歧义 | 高 | 明确语法规则 | v1.0 | 决策20:区分并和-> |
| 隐式变量滥用 | 高 | IDE可视化 + 文档建议 | v1.0 | 决策3:–strict模式 |
| 段名重复定义 | 高 | 编译时报错 | v1.0 | 决策24:段名唯一性 |
| 符号风格混乱 | 中 | 配置文件 + 格式化工具 | v1.5 | 决策21:.句样式 |
| 输入门槛 | 中 | 编辑器插件 | v1.5 | 决策4 + 决策19 |
| 类型注解外部库 | 低 | 记录已知限制 | v2.0 | 决策22:渐进式支持 |
| C扩展兼容性 | 低 | 记录已知限制 | v2.0 | 决策3:已知限制 |
| 代码块执行复杂度 | 低 | 默认忽略 | v1.5+ | 决策23:可选执行 |
MVP阶段(v1.0)必须解决
1. "并"用法歧义(高优先级)
问题:句子内部动词连接 vs 段落调用管道处理容易混淆
解决:
- 明确区分并(顺序执行)和->(管道处理)
- 更新语言规范和示例库
- 编译器提供明确错误提示
实现成本:低(仅语法规则调整)
2. 隐式变量滥用(高优先级)
问题:大篇中隐式变量来源难以追踪
解决:
- 提供–strict模式,要求显式声明继承
- IDE悬停显示变量来源(第X行定义)
- 文档建议:超过100行的篇使用显式依赖
实现成本:中(需IDE支持)
3. 段名重复定义(高优先级)
问题:同名段会导致覆盖或运行时错误
解决:
- 编译时检查段名唯一性
- 明确错误信息和位置
- 不支持重载
实现成本:低(编译器检查)
v1.5阶段解决
4. 符号风格混乱(中优先级)
解决:
- 提供.句样式配置文件
- 实现句格式化工具
- 编辑器插件集成
5. 输入门槛(中优先级)
解决:
- VS Code插件:自动转换标点
- 快捷键支持
- 模板代码片段
v2.0阶段解决
6. 类型注解外部库(低优先级)
解决:
- 记录在已知限制中
- 外部库类型仅作文档用途
- 未来可考虑渐进式类型
7. C扩展兼容性(低优先级)
解决:
- 记录在已知限制中
- 提供别名机制
- 文档说明注意事项
风险追踪文档
在项目仓库中维护RISKS.md:
# 风险追踪
## 高优先级(MVP必须解决)
– [ ] "并"用法歧义 → 决策20
– [ ] 隐式变量滥用 → 决策3
– [ ] 段名重复定义 → 决策24
## 中优先级(v1.5解决)
– [ ] 符号风格混乱 → 决策21
– [ ] 输入门槛 → 决策4, 决策19
## 低优先级(v2.0解决)
– [ ] 类型注解外部库 → 决策22
– [ ] C扩展兼容性 → 决策3
理由
- ✅ 明确优先级,集中资源解决关键问题
- ✅ 高风险不阻塞MVP发布
- ✅ 中低风险有明确的后续计划
- ✅ 可追踪、可验证
决策27:统一双字关键字
最终决策:所有核心关键字统一为双字,实现分词零歧义
问题背景
当前设计中存在单字关键字(设 为 若 则 返),可能导致分词歧义:
设定x=5。 → [设] [定] [x]… 还是 [设定] [x]…?
若x大于5则 → 如何区分[若]和[若x]?
解决方案
统一为双字关键字:
| 定义 | 设 | 定义 | 定义甲等于三。 |
| 赋值 | 为 | 等于 | 甲等于十。 |
| 条件 | 若 | 如果 | 如果甲大于十那么: |
| 分支 | 则 | 那么 | 如果甲大于十那么: |
| 返回 | 返 | 返回 | 返回甲加乙。(已双字) |
| 函数 | 段 | 段 | 《计算》段(…)(保留) |
对比示例
优化前(单字关键字):
设甲为三。
若甲大于十则:
打印甲。
结束。
优化后(双字关键字):
定义甲等于三。
如果甲大于十那么:
打印甲。
结束。
双字关键字的优势
分词零歧义:
定义x等于5。 → [定义] [x] [等于] [5] [。]
设x为5。 → [设] [x] [为] [5] [。] 或 [设x] [为] [5]?(歧义)
语义明确:
- 定义 比 设 更明确
- 等于 比 为 更清晰
- 如果 比 若 更自然
统一美观:
- 所有关键字长度一致
- 代码更整齐
完整关键字表
| 定义声明 | 定义 常量 | 变量和常量定义 |
| 条件判断 | 如果 那么 否则 否则若 | 条件分支 |
| 循环控制 | 遍历 当 跳出 跳过 | 循环结构 |
| 函数定义 | 段 返回 | 段落定义和返回值 |
| 异常处理 | 尝试 捕获 抛出 | 异常处理 |
| 模块管理 | 导入 导出 从 | 模块导入导出 |
| 逻辑运算 | 且 或 非 | 逻辑运算(单字保留) |
| 特殊值 | 真 假 空 | 布尔和空值(单字保留) |
理由
- ✅ 分词零歧义(最大优势)
- ✅ 语义更明确
- ✅ 统一美观
- ✅ 学习成本低(双字更易记忆)
决策28:元数驱动解析
最终决策:引入元数驱动解析机制,支持无括号函数调用
问题背景
当前段落调用需要括号:
《快速排序》(列表)
能否简化为无括号形式?
《快速排序》列表
元数驱动原理
核心机制:每个动词(函数)声明自己的参数数量(元数),解析器自动收集参数
VERB_ARITY = {
# 算术运算(二元)
'加': 2,
'减': 2,
'乘': 2,
'除': 2,
# 列表操作
'首': 1, # 取首元素
'余': 1, # 取余下元素
'长': 1, # 取长度
'列': -1, # 可变参数
# I/O操作
'打印': 1,
'读取': 1,
}
解析示例
示例1:简单函数调用
打印甲。
解析过程:
1. 打印 (arity=1) → 收集1个参数
2. 甲 → 参数
3. 。 → 阻断符,停止收集
结果:打印(甲)
示例2:嵌套函数调用
打印加1乘2 3。
解析过程:
1. 打印 (arity=1) → 收集1个参数
2. 加 (arity=2) → 收集2个参数 [1, …]
3. 乘 (arity=2) → 收集2个参数 [2, 3]
4. 加收集完毕 → 加(1, 乘(2, 3))
5. 打印收集完毕 → 打印(加(1, 乘(2, 3)))
结果:打印(加(1, 乘(2, 3))) = 打印(7)
示例3:可变参数
列1 2 3 4 5。
解析过程:
1. 列 (arity=-1) → 可变参数
2. 1 2 3 4 5 → 收集所有参数
3. 。 → 阻断符,停止收集
结果:列(1, 2, 3, 4, 5) = [1, 2, 3, 4, 5]
阻断符机制
解析器遇到以下符号时停止收集参数:
| 。 | 语句结束 |
| , | 管道操作符 |
| ) | 右括号 |
| 那么 否则 | 条件关键字 |
| 结束 | 块结束 |
段落调用的元数
每个段落声明自己的参数数量:
《快速排序》段(列表: 列表) -> 列表:
…
结束。
# 元数 = 1
调用时:
# 方式1:有括号(显式,推荐)
《快速排序》(列表)
# 方式2:无括号(元数驱动)
《快速排序》列表
两种调用模式
词句段篇支持两种调用模式:
| 显式模式 | 《段名》(参数) | 教学、文档、复杂表达式 | ★★★★★ |
| 简洁模式 | 《段名》参数 | 熟练用户、简单调用 | ★★★☆☆ |
示例:
# 显式模式(推荐)
《快速排序》(列表)
《计算》(甲, 乙, 操作)
# 简洁模式
《快速排序》列表
《计算》甲 乙 操作
理由
- ✅ 简化函数调用语法
- ✅ 支持无括号书写
- ✅ 保持向后兼容(两种模式并存)
- ✅ 经验证的技术(言语言yan、心语xinyu成功实践)
决策29:无空格分词支持
最终决策:支持无空格分词,实现真正的中文连续书写
问题背景
当前示例中大量使用空格分隔:
设 甲 为 三。
若 甲 大于 十 则:
打印 甲。
结束。
能否实现无空格书写?
定义甲等于三。
如果甲大于十那么:
打印甲。
结束。
技术方案
三层分词机制:
第1层:类型切换自动分词
规则:字符类型切换时自动分词
类型:
– HAN:汉字
– NUM:数字
– SYM:符号
– ENG:英文
示例:
定义甲等于三。
HAN HAN HAN HAN HAN 。
↑ ↑ ↑ ↑
切换 切换 切换 保持
分词:[定义] [甲] [等于] [三] [。]
第2层:双字关键词优先匹配
规则:优先匹配双字关键词,无法匹配则作为标识符
输入:定义甲等于三
解析:
1. 尝试匹配"定义甲" → 不是关键词
2. 尝试匹配"定义" → 是关键词 ✓
3. 剩余"甲" → 标识符
4. 尝试匹配"等于三" → 不是关键词
5. 尝试匹配"等于" → 是关键词 ✓
6. 剩余"三" → 数字
结果:[定义] [甲] [等于] [三]
第3层:元数驱动参数收集
输入:打印甲加乙
解析:
1. 打印 (arity=1) → 需要收集1个参数
2. 甲 → 参数的一部分
3. 加 (arity=2) → 新动词!停止收集
4. 甲加乙 → 不是参数,而是"甲" + "加" + "乙"
正确解析:打印(甲) + 加(乙, ?)
等等,这有问题!
问题:无空格时,如何区分打印甲和打印+甲加乙?
解决方案:引入最小吞噬原则
原则:动词只吞噬必要的参数数量,遇到新动词立即停止
输入:打印甲加乙
解析:
1. 打印 (arity=1) → 收集1个参数
2. 甲 → 收集到1个参数,停止!
3. 加 (arity=2) → 收集2个参数
4. 乙 → 参数1
5. ?→ 参数2缺失(语法错误)
正确写法:打印甲加乙乘丙。
解析:打印(甲) + 加(乙, 乘(丙, ?))
还是不对!
最终方案:
打印甲加乙。 → 打印(加(甲, 乙))
修正方案:右结合优先
输入:打印甲加乙。
解析:
1. 扫描到句号 → 这是完整句子
2. 从右向左解析
3. 加 (arity=2) → 收集甲和乙
4. 打印 (arity=1) → 收集加的结果
结果:打印(加(甲, 乙))
无空格书写规则
核心规则:
示例对比:
| 设 甲 为 三。 | 定义甲等于三。 | 定义(甲, 3) |
| 若 甲 大于 十 则: | 如果甲大于十那么: | 如果(甲>10) 那么 |
| 打印 甲 加 乙。 | 打印甲加乙。 | 打印(加(甲, 乙)) |
| 《快速排序》列表 | 《快速排序》列表 | 快速排序(列表) |
双模式支持
词句段篇支持两种书写模式:
| 有空格模式 | 易读、易解析 | 教学、文档、调试 | ★★★☆☆ |
| 无空格模式 | 简洁、自然 | 熟练用户、正式代码 | ★★★★★ |
示例:
# 有空格模式(兼容旧语法)
定义 甲 等于 三。
如果 甲 大于 十 那么:
打印 甲。
结束。
# 无空格模式(推荐新语法)
定义甲等于三。
如果甲大于十那么:
打印甲。
结束。
理由
- ✅ 实现真正的中文连续书写
- ✅ 降低输入成本
- ✅ 提高语义密度
- ✅ 经验证的技术(言语言yan、翰语Hanyu成功实践)
决策30:中文管道操作符统一
最终决策:支持三种管道操作符:->符号、,中文逗号、并关键字
问题背景
当前设计使用->符号和并关键字作为管道操作符:
数据 -> 《过滤》 -> 《排序》
数据 并 《过滤》 并 《排序》
但其他中文语言使用,(中文逗号)作为管道操作符,更自然:
数据,过滤,排序
三种管道操作符对比
| -> | 函数式 | 数据 -> 《过滤》 -> 《排序》 | 专业程序员 |
| , | 中文风格 | 数据,过滤,排序 | 中文自然书写 |
| 并 | 自然语言 | 数据 并 《过滤》 并 《排序》 | 口语化表达 |
统一方案
三种操作符完全等价:
# 方式1:函数式风格(推荐)
数据 -> 《过滤》 -> 《排序》 -> 《输出》
# 方式2:中文逗号(等价)
数据,过滤,排序,输出
# 方式3:自然语言(等价)
数据 并 《过滤》 并 《排序》 并 《输出》
语义规则
管道操作符->/,/并表示数据流动:
数据 操作符1 操作符2 操作符3
等价于:
操作符3(操作符2(操作符1(数据)))
示例:
列表1 2 3 -> 皆乘2 -> 只大3 -> 归加0
解析过程:
1. 列表(1, 2, 3) = [1, 2, 3]
2. 皆乘(2) = [2, 4, 6]
3. 只大(3) = [4, 6]
4. 归加(0) = 10
结果:10
阻断符与分隔符
重要区别:
| 。 | 语句结束 | 阻断所有参数收集 |
| , | 管道操作符 | 数据流动 |
| 、 | 并列分隔符 | 参数并列(顿号) |
| , | 英文逗号 | 与,等价 |
示例:
# 管道操作
数据,过滤,排序
# 参数并列
列表甲、乙、丙
# 混合使用
数据,过滤(甲、乙、丙),排序
推荐风格
官方推荐:
| 专业代码 | -> | 数据流向明确 |
| 教学示例 | , | 自然易读 |
| 口语表达 | 并 | 符合中文习惯 |
示例:
# 专业代码(推荐)
原始数据 -> 《验证》 -> 《处理》 -> 《保存》
# 教学示例
原始数据,验证,处理,保存
# 口语表达
原始数据 并 验证 并 处理 并 保存
理由
- ✅ 兼容不同用户习惯
- ✅ 提供多种表达方式
- ✅ 与其他中文语言保持一致
- ✅ 灵活性高
决策31:因果链语法(高级特性)
最终决策:v2.0引入因果链语法,实现事件驱动编程
问题背景
传统条件判断冗长:
如果温度大于30那么:
开启风扇。
开启空调。
结束。
能否更简洁?
因果链语法(借鉴言律语言)
语法:条件,动作。 或 条件1、条件2,动作1、动作2。
# 简单因果链
温度大于30,开启风扇。
# 多条件多动作
温度大于30、湿度大于60,开启风扇、开启空调。
# 等价于
如果温度大于30且湿度大于60那么:
开启风扇。
开启空调。
结束。
语法规则
| , | 因果连接 | "当…时,执行…" |
| 、 | 并列连接 | "同时满足"或"同时执行" |
| 。 | 语句结束 | 因果链结束 |
示例对比
传统写法:
如果订单状态等于已付款那么:
如果库存充足那么:
准备发货。
发送通知。
否则:
等待补货。
结束。
结束。
因果链写法:
订单状态等于已付款、库存充足,准备发货、发送通知。
订单状态等于已付款、库存不足,等待补货。
高级用法:状态流语法
# 状态变化监听
订单·状态变为已付款,准备发货。
# 等价于
当订单状态变为已付款时:
准备发货。
实现优先级
| MVP | v1.0 | 不支持(使用传统如果…那么) |
| 高级 | v2.0 | 支持因果链语法 |
理由
- ✅ 代码量减少50%
- ✅ 更符合中文思维
- ✅ 适合事件驱动编程
- ✅ 经验证的设计(言律语言成功实践)
决策32:主谓宾语序(实验性)
最终决策:v2.0实验主谓宾语序,作为可选语法
问题背景
明道语言创新性地采用主谓宾语序:
2, 3, 求和, 打印
# 解析:把2和3交给"求和"处理,结果交给"打印"处理
# 等价于:打印(求和(2, 3))
主谓宾语序原理
传统编程:函数(参数) 或 参数 -> 函数
主谓宾语序:参数, 函数 或 参数1, 参数2, 函数
符合中文思维:"把A交给B处理"
示例对比
传统写法:
《快速排序》(列表)
打印(长度(列表))
主谓宾写法:
列表, 《快速排序》
列表, 长度, 打印
语序规则
参数1, 参数2, …, 参数n, 函数
等价于:
函数(参数1, 参数2, …, 参数n)
解析方向:从右向左,最右侧为函数名
管道式组合
列表, 排序, 长度, 打印
解析过程(从右向左):
1. 打印 ← 接收前一步结果
2. 长度 ← 接收前一步结果
3. 排序 ← 接收前一步结果
4. 列表 → 数据源
执行顺序(从左向右):
列表 → 排序 → 长度 → 打印
与词句段篇的结合
两种语法并存:
| 传统语法 | 《快速排序》(列表) | 显式、教学 |
| 主谓宾语法 | 列表, 《快速排序》 | 简洁、熟练用户 |
示例:
# 传统语法(推荐)
定义列表等于列1 2 3 4 5。
定义排序后等于《快速排序》(列表)。
打印排序后。
# 主谓宾语法(实验性)
列表, 《快速排序》, 打印。
实现优先级
| MVP | v1.0 | 不支持(使用传统语法) |
| 实验 | v2.0 | 支持主谓宾语序(可选) |
理由
- ✅ 符合中文"把A交给B"的思维
- ✅ 代码简洁
- ✅ 管道式处理自然
- ✅ 经验证的设计(明道语言成功实践)
决策33:缩进定义块(无显式结束)
最终决策:采用缩进定义代码块,支持显式结束可选(双模式)
问题背景
当前设计要求显式结束。标记:
《快速排序》段(列表):
如果列表长度小于二那么返回列表。
…
返回《快速排序》(小列表)。
结束。
问题:
- 结束。冗余,增加代码长度
- 与主流中文编程语言不一致
- Python等现代语言已证明缩进足够
9个中文编程语言的块结构对比
| 言语言yan | 缩进定义 | 无显式结束 | ★★★★★ |
| 知行zhixing | 缩进定义 | 无显式结束 | ★★★★★ |
| traeyan | 缩进定义 | 可选完 | ★★★★☆ |
| 言知yanzhi | 缩进定义 | 无显式结束 | ★★★★★ |
| 心语xinyu | 缩进定义 | 。结束块 | ★★★★☆ |
| 墨言moyan | 缩进定义 | 无显式结束 | ★★★★★ |
| 言律yanlv | 缩进定义 | 无显式结束 | ★★★★★ |
| 明道Mingdao | 缩进定义 | 无显式结束 | ★★★★★ |
| 翰语Hanyu | 缩进定义 | 无显式结束 | ★★★★★ |
结论:9个语言中有8个采用缩进定义块,无显式结束语句
解决方案:双模式支持
模式1:缩进模式(推荐)
特点:缩进定义块,无显式结束
《快速排序》段(列表):
如果列表长度小于二那么返回列表。
定义基准等于列表之中间项。
定义小列表等于列表过滤项小于基准。
定义大列表等于列表过滤项大于基准。
返回《快速排序》(小列表) -> 等列表 -> 《快速排序》(大列表)。
《计算平均分》段(成绩列表):
定义总分等于零。
遍历成绩列表:
总分加等于当前项。
定义平均分等于总分除以成绩列表长度。
返回平均分。
优势:
- ✅ 简洁(减少代码长度10-15%)
- ✅ 与主流中文编程语言一致
- ✅ 符合Python风格
- ✅ 降低输入成本
模式2:显式模式(兼容)
特点:显式结束。标记
《快速排序》段(列表):
如果列表长度小于二那么返回列表。
定义基准等于列表之中间项。
定义小列表等于列表过滤项小于基准。
定义大列表等于列表过滤项大于基准。
返回《快速排序》(小列表) -> 等列表 -> 《快速排序》(大列表)。
结束。
《计算平均分》段(成绩列表):
定义总分等于零。
遍历成绩列表:
总分加等于当前项。
结束。
定义平均分等于总分除以成绩列表长度。
返回平均分。
结束。
优势:
- ✅ 明确无歧义
- ✅ 对初学者友好
- ✅ 适合复杂嵌套
缩进规则
核心规则:冒号:开启代码块,缩进增加;缩进减少表示块结束
缩进级别:
0: 段定义
1: 段内语句
2: 条件块内语句
3: 循环块内语句
2: 条件块结束(缩进减少)
1: 继续段内语句
0: 段定义结束(缩进减少到0)
示例:
《示例》段():
定义甲等于十。 # 缩进1
如果甲大于五那么: # 缩进1,冒号开启块
打印"大于五"。 # 缩进2
定义乙等于甲乘二。 # 缩进2
打印乙。 # 缩进2
否则: # 缩进1,else块
打印"小于等于五"。 # 缩进2
打印"完成"。 # 缩进1,条件块结束
推荐缩进量
| 2空格 | 推荐 | 节省屏幕空间,适合中文 |
| 4空格 | 兼容Python | Python用户习惯 |
| Tab | 不推荐 | 混用风险 |
混合使用规则
允许在同一文件中混合使用两种模式:
# 段1:缩进模式
《计算平方》段(x):
返回x乘x。
# 段2:显式模式
《计算立方》段(x):
返回x乘x乘x。
结束。
解析器支持:
- 检测到结束。 → 使用显式模式
- 未检测到结束。 → 使用缩进模式
条件语句的块定义
单行条件:无需块
如果甲大于五那么打印"大"。
多行条件:缩进定义块
# 缩进模式(推荐)
如果甲大于五那么:
打印"大"。
打印"很大"。
# 显式模式(兼容)
如果甲大于五那么:
打印"大"。
打印"很大"。
结束。
循环语句的块定义
单行循环:无需块
遍历列表打印当前项。
多行循环:缩进定义块
# 缩进模式(推荐)
遍历成绩列表:
如果当前项大于六十那么:
打印"及格"。
否则:
打印"不及格"。
# 显式模式(兼容)
遍历成绩列表:
如果当前项大于六十那么:
打印"及格"。
否则:
打印"不及格"。
结束。
结束。
IDE支持
自动缩进:
- 输入:后自动增加缩进
- 回车后自动对齐缩进
- 支持Tab/Shift+Tab调整缩进
智能提示:
- 缩进不一致时高亮提示
- 块结束位置悬停显示
- 可选显示缩进线
迁移指南
从显式模式迁移到缩进模式:
# 自动转换工具
句格式化 –缩进模式 main.句
手动迁移:
理由
- ✅ 简洁(减少代码长度10-15%)
- ✅ 与8/9的中文编程语言一致
- ✅ 符合Python成功经验
- ✅ 向后兼容(双模式支持)
- ✅ 降低输入成本
第三部分:完整语法规范
一、基础语法元素
1.1 字符集
- 中文字符(Unicode CJK统一表意文字)
- 阿拉伯数字(0-9)
- 标点符号(,。、;:?!「」『』【】())
- 英文标点(,.:;?!()[])
- 运算符号(+-×÷=<>≤≥≠)
1.2 符号双模式
词句段篇语言支持中文符号和英文符号双模式,两者完全等价:
| 句号 | 。 | . | 定义甲等于三。/ 定义甲等于三. |
| 冒号 | : | : | 段名(参数):/ 段名(参数): |
| 逗号 | , | , | 甲,乙,丙 / 甲, 乙, 丙 |
| 分号 | ; | ; | 甲为一;乙为二 / 甲为一; 乙为二 |
| 小括号 | () | () | 《计算》(甲,乙)/ 《计算》(甲, 乙) |
推荐风格:语义符号用中文,辅助符号用英文,缩进定义块
《计算》段(甲: 数, 乙: 数) -> 数:
返回甲加乙。
1.3 关键标点
| 。(句号) | 语句结束 | 定义甲等于三。 |
| ,(逗号) | 分隔符/管道 | 甲,乙,丙 |
| :(冒号) | 定义、映射 | 学生列表:张三,李四 |
| ;(分号) | 并列语句 | 甲为一;乙为二 |
| ()(括号) | 参数传递 | 《计算》(3, 5) |
| 《》(书名号) | 段落名标记 | 《快速排序》段 |
| 【】(方括号) | 篇名标记 | 【学生管理篇】 |
| 、(顿号) | 参数并列 | 列表甲、乙、丙 |
1.3 注释语法
采用代码块语法(类似Markdown),支持多语言嵌入:
# 单行注释
```注释
这是一条注释
多行注释
这是一段
跨越多行的注释
嵌入其他语言
x = 1
print(x)
cd yanlv-parser
python parser/simple_test.py
注释块中可以写任何内容
以下代码暂时禁用:
定义甲等于三
定义乙等于五
打印甲加乙
—
## 二、词级语法
### 2.1 名词词(数据词)
**基础名词**:
数 表示数值 列 表示列表 表 表示表格 典 表示字典 串 表示字符串 集 表示集合
**限定名词**:
整数 整数类型 浮数 浮点类型 空列 空列表 布尔 布尔值
### 2.2 动词词(操作词)
**基础动词**:
加 加法 减 减法 乘 乘法 除 除法 并 并集 交 交集
**数据动词**:
设 赋值 取 取值 增 增加 删 删除 改 修改 查 查询
**控制动词**:
若 条件判断 遍 遍历 循 循环 返 返回 抛 抛出异常
—
## 三、句级语法
### 3.1 句的基本结构
**完整句型**:
主语 + 谓语 + 宾语 + 补语。
**示例**:
甲加等于五。 (主语:甲,谓语:加等于,宾语:五)
### 3.2 四种基本句型
#### A. 陈述句(赋值/定义)
设甲为三。 设列表为一,二,三。 设字典为甲:一,乙:二。
#### B. 判断句(条件)
若甲大于十则打印甲。
若甲大于十则打印大否则打印小。
若分数大于九十则等级为优 否则若分数大于八十则等级为良 否则等级为差。
#### C. 祈使句(操作/调用)
打印甲。 输出列表。 返回结果。
调用《排序》段参数列表。 调用《计算》段参数甲,乙。
#### D. 疑问句(查询)
甲为何值? 列表为空吗? 列表中有几项?
—
## 四、段级语法
### 4.1 段的基本结构
《段名》段(参数): (段落内容) 结束。
**带类型注解的段定义**:
《段名》段(参数: 类型, 参数: 类型) -> 返回类型: (段落内容) 结束。
**示例**:
无类型注解
《计算平均分》段(成绩列表): 总分为零。 遍历成绩列表: 总分加等于当前项。 平均分为总分除以项数。 返回平均分。 结束。
带类型注解
《计算平均分》段(成绩列表: 列表) -> 数: 总分: 数为零。 遍历成绩列表: 总分加等于当前项。 平均分为总分除以成绩列表长度。 返回平均分。 结束。
### 4.2 段的类型
#### A. 数据段(定义数据结构)
《学生》数据类型: 姓名为串。 年龄为整数。 成绩为列表。 结束。
#### B. 算法段(定义处理流程)
《快速排序》段(待排序列表): 若列表长度小于二则返回列表。
基准为列表之中间项。 小列表为空列。 大列表为空列。 等列表为空列。
遍历列表: 若当前项小于基准则加入小列表。 否则若当前项大于基准则加入大列表。 否则加入等列表。
返回《快速排序》(小列表)并等列表并《快速排序》(大列表)。 结束。
#### C. 业务段(定义业务规则)
《折扣计算》规则段(订单金额): 若订单金额大于一千则折扣率为零点八。 否则若金额大于五百则折扣率为零点九。 否则折扣率为一。
最终金额为订单金额乘折扣率。 返回最终金额。 结束。
### 4.3 段的参数定义
**无参数段**:
《获取当前时间》段(): 返回系统时间。 结束。
**单参数段(无类型注解)**:
《平方》段(数值): 返回数值乘数值。 结束。
**单参数段(带类型注解)**:
《平方》段(数值: 数) -> 数: 返回数值乘数值。 结束。
**多参数段(无类型注解)**:
《计算》段(甲,乙,操作): 若操作为加则返回甲加乙。 若操作为减则返回甲减乙。 若操作为乘则返回甲乘乙。 若操作为除则返回甲除乙。 结束。
**多参数段(带类型注解)**:
《计算》段(甲: 数, 乙: 数, 操作: 串) -> 数: 若操作为加则返回甲加乙。 若操作为减则返回甲减乙。 若操作为乘则返回甲乘乙。 若操作为除则返回甲除乙。 结束。
**默认参数**:
《问候》段(名字,问候语默认为你好): 返回问候语连接名字。 结束。
调用《问候》段参数张三。 # 输出:你好张三 调用《问候》段参数李四,早安。 # 输出:早安李四
### 4.4 段的返回值
**单值返回(无类型注解)**:
《计算》段(甲,乙): 返回甲加乙。 结束。
**单值返回(带类型注解)**:
《计算》段(甲: 数, 乙: 数) -> 数: 返回甲加乙。 结束。
**多值返回**:
《统计》段(列表): 最大值为列表之最大者。 最小值为列表之最小者。 平均值为列表之平均值。 返回最大值,最小值,平均值。 结束。
调用《统计》段参数列表得到大,小,均。
**多值返回(带类型注解)**:
《统计》段(列表: 列表) -> (数, 数, 数): 最大值为列表之最大者。 最小值为列表之最小者。 平均值为列表之平均值。 返回最大值,最小值,平均值。 结束。
—
## 五、篇级语法
### 5.1 篇的基本结构
【篇名】
引言: (导入依赖) (初始化配置)
数据定义: (全局数据定义)
核心流程: 第一章:(章节名) (章节内容)
第二章:(章节名) (章节内容)
辅助段落: (段落定义)
结语: (清理工作) (最终输出)
### 5.2 篇的完整示例
【学生成绩分析篇】
引言: 导入数据处理工具。 导入可视化工具。 导出格式设为PDF。
数据定义: 学生列表为空列。 成绩字典为空典。 报告路径为成绩报告PDF。
核心流程: 第一章:数据加载 学生列表加载自学生CSV。 成绩字典加载自成绩CSV。 打印数据加载完成。
第二章:数据分析 调用成绩统计段。 调用成绩排名段。 调用成绩分布段。
第三章:报告生成 生成统计图表。 生成排名列表。 生成分布直方图。 合并为PDF报告。
辅助段落: 成绩统计段: 总人数为学生列表之长度。 平均分为成绩字典之平均值。 最高分为成绩字典之最大值。 最低分为成绩字典之最小值。 返回总人数,平均分,最高分,最低分。 结束。
结语: 保存报告至报告路径。 打印分析完成。
—
## 六、运算符与表达式
### 6.1 算术运算符
| 中文 | 符号 | 示例 |
|—–|——|——|
| 加 | + | 三加五 |
| 减 | – | 十减三 |
| 乘 | × | 四乘五 |
| 除 | ÷ | 十除二 |
| 模 | % | 十模三 |
| 幂 | ^ | 二幂三 |
### 6.2 比较运算符
| 中文 | 符号 | 示例 |
|—–|——|——|
| 等于 | == | 甲等于乙 |
| 不等于 | != | 甲不等于乙 |
| 大于 | > | 甲大于乙 |
| 小于 | < | 甲小于乙 |
| 大于等于 | >= | 甲大于等于乙 |
| 小于等于 | <= | 甲小于等于乙 |
### 6.3 逻辑运算符
| 中文 | 符号 | 示例 |
|—–|——|——|
| 且 | && | 甲大于零且乙大于零 |
| 或 | \\|\\| | 甲大于十或乙大于十 |
| 非 | ! | 非甲为真 |
### 6.4 表达式优先级
**从高到低**:
1. 括号:()
2. 幂:^
3. 乘除模:× ÷ %
4. 加减:+ –
5. 比较:> < == != >= <=
6. 逻辑非:非
7. 逻辑且:且
8. 逻辑或:或
—
## 七、控制流
### 7.1 条件判断
**单分支**:
若甲大于十则: 打印甲。 结束。
**双分支**:
若甲大于十则: 打印大。 否则: 打印小。 结束。
**多分支**:
若甲大于九十则: 等级为优。 否则若甲大于八十则: 等级为良。 否则若甲大于六十则: 等级为中。 否则: 等级为差。 结束。
### 7.2 循环遍历
**遍历列表**:
遍历列表: 打印当前项。 结束。
遍历列表之为项: 打印项。 结束。
**遍历字典**:
遍历字典之为键,值: 打印键连接值。 结束。
**带索引遍历**:
遍历列表之为索引,项: 打印索引连接项。 结束。
### 7.3 循环控制
**跳出循环**:
遍历列表: 若当前项大于十则跳出。 打印当前项。 结束。
**跳过当前项**:
遍历列表: 若当前项为奇数则跳过。 打印当前项。 结束。
### 7.4 异常处理
**捕获异常**:
尝试: 打开文件。 读取内容。 捕获异常为错误: 打印错误信息。 结束。
**抛出异常**:
若甲小于零则: 抛出异常甲不能小于零。 结束。
—
## 八、文件组织
### 8.1 文件类型
| 文件类型 | 扩展名 | 用途 | 执行方式 |
|———|——-|——|———|
| 句文件 | .句 | 脚本/入口 | 顺序执行 |
| 段文件 | .段 | 段落定义 | 被导入使用 |
| 篇文件 | .篇 | 模块/应用 | 核心流程章节 |
### 8.2 目录结构
my-project/ ├── main.句 # 入口文件 ├── utils/ # 工具模块 │ ├── 排序.段 │ ├── 搜索.段 │ └── 格式化.段 ├── modules/ # 业务模块 │ ├── 用户管理.篇 │ └── 订单处理.篇 └── data/ # 数据文件 └── config.json
### 8.3 导入导出
**导出段落**:
utils/math.段
导出《平方》 导出《立方》
《平方》段(x): 返回x乘x 结束。
《立方》段(x): 返回x乘x乘x 结束。
**导入使用**:
main.句
从utils/math导入《平方》, 《立方》
打印《平方》(5) # 25 打印《立方》(3) # 27
—
# 第四部分:实现路线图
## 实现优先级
### 第一优先级(MVP v1.0)
1. ✅ 单行句解析(不限动词数)
2. ✅ 分号多句解析
3. ✅ 段落定义和调用
4. ✅ 词法作用域实现
5. ✅ Python缩进规则
6. ✅ .句/.段/.篇文件支持
7. ✅ 文件导入机制
### 第二优先级(v1.5)
1. ✅ 异常处理(尝试-捕获)
2. ✅ 自定义错误类型
3. ✅ 业务规则编辑器前端
4. ✅ REPL交互模式
5. ✅ 热加载支持
### 第三优先级(v2.0)
1. ✅ 并发/异步(实验性)
2. ✅ –strict模式
3. ✅ 类型系统
4. ✅ 调试工具
5. ✅ 高性能编译
—
## 附录:关键词总表
### 控制词
若、则、否则、结束 遍历、循、跳出、跳过 尝试、捕获、抛出
### 定义词
设、为、等于 参数、返回 导入、导出、从 父、继承、使用
### 数据词
数、列、表、典、串、集 整数、浮数、布尔 空列、空典
### 动作词
加、减、乘、除、模、幂 并、交、差、属、含 取、增、删、改、查 打印、输出、输入
### 修饰词
大、小、多、少、快、慢 首、末、最 真、假、空
—
## 版本历史
| 版本 | 日期 | 主要变更 |
|—–|——|———|
| v1.0 | 2026-06-09 | 初始设计 |
| v1.1 | 2026-06-09 | 显式标记、作用域控制 |
| v1.2 | 2026-06-09 | 细节打磨 |
| v1.3 | 2026-06-09 | 最终定稿:简化核心 |
| v1.3.1 | 2026-06-09 | 补充决策:异常、并发、缩进等 |
| v1.3.2 | 2026-06-09 | 四项补充:语法统一、并连接符、类型注解、代码块注释 |
| v1.3.3 | 2026-06-09 | 风险分析、已知限制、示例库 |
| v1.3.4 | 2026-06-09 | 符号双模式支持(中英文符号等价) |
| v1.3.5 | 2026-06-09 | 七项深度问题决策:并/管道区分、样式配置、类型系统、代码块执行、段名唯一性、方法语法、风险规避策略 |
| v1.3.6 | 2026-06-09 | 基于中文编程语言对比研究的语法优化:双字关键字、元数驱动、无空格分词、管道操作符统一、因果链语法、主谓宾语序 |
| v1.3.7 | 2026-06-09 | 缩进定义块(无显式结束):双模式支持,与8/9中文编程语言一致,减少代码长度10-15% |
—
# 第五部分:潜在风险与缓解
## 一、缩进敏感 + 中文标点 = 输入门槛
### 风险描述
虽然决策4允许用英文句号`.`代替`。`,但用户仍需要输入中文冒号`:`、逗号`,`等。对于习惯英文编程的用户,频繁切换输入法仍是痛点。
**风险等级**:中等
### 缓解措施
1. **编辑器插件**:自动转换英文标点为中文
– 输入`:` → 自动变成`:`
– 输入`,` → 自动变成`,`(可配置)
2. **双模式支持**:允许英文标点作为备选
中文标点(推荐)
设甲为三。
英文标点(兼容)
设甲为三.
3. **IDE提示**:悬停显示标点快捷键
—
## 二、"默认只读继承"可能导致过度依赖隐式变量
### 风险描述
业务专家虽然喜欢少打字,但当篇变大(例如超过200行),隐式变量来源会变得难以追踪。即便有`–strict`模式,但默认模式仍可能鼓励不良实践。
**风险等级**:高
### 缓解措施
1. **IDE变量来源提示**:鼠标悬停显示继承链
《统计》段: 返回学生列表之长度。 # 悬停显示:学生列表 ← 继承自主程序(第15行定义)
2. **一键转换为显式依赖**:
转换前
《统计》段: 返回学生列表之长度。
转换后
《统计》段(继承: 学生列表): 返回学生列表之长度。
3. **代码审查规则**:超过100行的篇默认建议使用显式依赖
—
## 三、与Python生态互操作时,中文变量名传递给C扩展可能出错
### 风险描述
虽然Python 3支持Unicode变量名,但某些C扩展可能假定变量名为ASCII。
**风险等级**:低
### 缓解措施
1. **记录在已知限制中**(见下文"已知限制"章节)
2. **提供别名机制**:
中文变量名
学生列表为[张三, 李四]
传递给C扩展时使用别名
调用numpy.array(学生列表 别名 student_list)
3. **类型注解中标注ASCII要求**:
《调用C库》段(数据: 列表, 名称: 串 仅ASCII) -> 列表: …
—
## 四、错误类型定义与数据段语法重复
### 风险描述
原设计使用了`《验证错误》错误类型:`,而数据段用的是`《学生》数据类型:`。两者很像,但语义不同(一个用于异常,一个用于普通数据),用户可能混淆。
**风险等级**:中
### 缓解措施
**统一语法**:错误定义不加"类型"二字,与普通数据类型区分
错误定义(不加"类型")
《验证错误》错误: 信息为串 字段为串 结束。
数据定义(保留"类型")
《学生》数据类型: 姓名为串 年龄为数 结束。
使用
抛出《验证错误》错误信息为"年龄无效"字段为"年龄"。
—
# 第六部分:已知限制
以下限制是语言设计中的权衡,不影响核心功能,但在特定场景下需要注意:
## 1. 中文变量名与C扩展兼容性
某些Python C扩展(如早期版本的NumPy、Pandas API)可能不支持Unicode变量名。建议:
– 传递数据给C扩展时,使用英文别名
– 或使用`.to_ascii()`方法转换(如需实现)
## 2. 缩进必须一致
混用空格和Tab会导致解析错误。建议:
– 使用编辑器配置自动转换Tab为空格
– 推荐2空格缩进(节省屏幕空间)
## 3. 字符串插值
当前版本不支持Python风格的f-string。字符串拼接使用:
方法1:连接函数
打印连接("结果是", 结果)。
方法2:格式化函数(v1.5实现)
打印格式("结果是{}",结果)。
方法3:字符串模板(v2.0实现)
打印"结果是{结果}"。
## 4. 并发/异步特性为实验性
v1.0不提供并发/异步支持,计划在v2.0实现。
—
# 第七部分:示例库
以下10个真实场景示例验证设计的实用性:
## 示例1:快速排序
《快速排序》段(列表: 列表) -> 列表: 若列表长度小于二则返回列表。
基准为列表之中间项。 小列表为列表过滤项小于基准。 大列表为列表过滤项大于基准。 等列表为列表过滤项等于基准。
返回《快速排序》(小列表)并等列表并《快速排序》(大列表)。 结束。
调用《快速排序》参数[三,一,四,一,五,九,二,六]。
## 示例2:学生成绩统计
《计算平均分》段(成绩列表: 列表) -> 数: 总分为零。 遍历成绩列表: 总分加等于当前项。 平均分为总分除以成绩列表长度。 返回平均分。 结束。
《统计等级分布》段(成绩列表: 列表) -> 典: 分布为典包含优零,良零,中零,差零。 遍历成绩列表: 若当前项大于等于九十则分布之优加等于一。 否则若当前项大于等于八十则分布之良加等于一。 否则若当前项大于等于六十则分布之中加等于一。 否则分布之差加等于一。 返回分布。 结束。
主程序
成绩列表为[八十五,九十二,七十八,六十三,五十八,九十五]。 平均分为《计算平均分》参数成绩列表。 分布为《统计等级分布》参数成绩列表。 打印连接("平均分:",平均分)。 打印分布。
## 示例3:文件读取与处理
《读取CSV》段(文件路径: 串) -> 列表: 尝试: 文件为打开文件路径。 内容为文件读取全部。 行列表为内容分割换行符。 返回行列表。 捕获异常为错误: 抛出《文件错误》错误信息为错误信息路径为文件路径。 结束。 结束。
《处理数据》段(数据: 列表) -> 列表: 结果为空列。 遍历数据: 若当前项非空则结果增加当前项。 返回结果。 结束。
主程序
数据为《读取CSV》参数"data.csv"。 处理后为《处理数据》参数数据。 打印连接("共处理",处理后长度,"行")。
## 示例4:斐波那契数列
《斐波那契》段(n: 数) -> 数: 若n小于等于一则返回n。 返回《斐波那契》参数n减一加《斐波那契》参数n减二。 结束。
《斐波那契列表》段(项数: 数) -> 列表: 结果为空列。 i为零。 当i小于项数: 结果增加《斐波那契》参数i。 i加等于一。 返回结果。 结束。
主程序
前十项为《斐波那契列表》参数十。 打印前十项。
## 示例5:字典操作
《统计词频》段(文本: 串) -> 典: 词频为空典。 词列表为文本分割空格。 遍历词列表: 若词频包含当前项则词频之当前项加等于一。 否则词频设置当前项为一。 返回词频。 结束。
《取前N高频词》段(词频: 典, n: 数) -> 列表: 排序后为词频按值降序排序。 返回排序后前n项。 结束。
主程序
文本为"今天天气很好 今天心情也不错 明天天气也很好"。 词频为《统计词频》参数文本。 高频词为《取前N高频词》参数词频参数三。 打印高频词。
## 示例6:类与对象模拟
《学生》数据类型: 姓名为串。 年龄为数。 成绩为列表。 结束。
《创建学生》段(姓名: 串, 年龄: 数) -> 学生: 返回学生包含姓名姓名年龄年龄成绩空列。 结束。
《添加成绩》段(学生: 学生, 成绩: 数) -> 学生: 学生之成绩增加成绩。 返回学生。 结束。
《计算学生平均分》段(学生: 学生) -> 数: 总分为学生之成绩求和。 返回总分除以学生之成绩长度。 结束。
主程序
张三为《创建学生》参数"张三"参数十八。 张三为《添加成绩》参数张三参数八十五。 张三为《添加成绩》参数张三参数九十二。 平均分为《计算学生平均分》参数张三。 打印连接(张三之姓名,"的平均分是",平均分)。
## 示例7:递归汉诺塔
《汉诺塔》段(盘子数: 数, 源柱: 串, 辅柱: 串, 目柱: 串) -> 列表: 步骤为空列。
若盘子数等于一则: 步骤增加连接("移动盘子从",源柱,"到",目柱)。 返回步骤。 结束。
步骤并等于《汉诺塔》参数盘子数减一参数源柱参数目柱参数辅柱。 步骤增加连接("移动盘子从",源柱,"到",目柱)。 步骤并等于《汉诺塔》参数盘子数减一参数辅柱参数源柱参数目柱。
返回步骤。 结束。
主程序
步骤为《汉诺塔》参数三参数"A"参数"B"参数"C"。 遍历步骤: 打印当前项。
## 示例8:素数判断
《是否素数》段(n: 数) -> 布尔: 若n小于二则返回假。 若n等于二则返回真。 若n模二等于零则返回假。
i为三。 当i乘i小于等于n: 若n模i等于零则返回假。 i加等于二。 返回真。 结束。
《找出素数》段(开始: 数, 结束: 数) -> 列表: 素数列表为空列。 i为开始。 当i小于等于结束: 若《是否素数》参数i则素数列表增加i。 i加等于一。 返回素数列表。 结束。
主程序
素数为《找出素数》参数一参数一百。 打印连接("一到一百之间有",素数长度,"个素数")。 打印素数。
## 示例9:简单计算器
《计算》段(甲: 数, 乙: 数, 操作: 串) -> 数: 若操作为"加"则返回甲加乙。 若操作为"减"则返回甲减乙。 若操作为"乘"则返回甲乘乙。 若操作为"除"则: 若乙等于零则抛出《计算错误》错误信息为"除数不能为零"。 返回甲除乙。 结束。 若操作为"模"则返回甲模乙。 若操作为"幂"则返回甲幂乙。 抛出《计算错误》错误信息为连接("未知操作:",操作)。 结束。
《计算错误》错误: 信息为串。 结束。
主程序
尝试: 结果为《计算》参数十参数五参数"加"。 打印连接("结果是",结果)。 捕获异常为错误: 打印连接("错误:",错误之信息)。 结束。
## 示例10:二分查找
《二分查找》段(有序列表: 列表, 目标: 数) -> 数: 左为零。 右为有序列表长度减一。
当左小于等于右: 中为左加右除以二。 若有序列表之中等于目标则返回中。 否则若有序列表之中小于目标则左为中加一。 否则右为中减一。 返回负一。 结束。
主程序
有序列表为[一,三,五,七,九,十一,十三,十五,十七,十九]。 位置为《二分查找》参数有序列表参数十一。 若位置大于等于零则: 打印连接("找到目标,位置是",位置)。 否则: 打印"未找到目标"。 结束。
—
## 示例库验证结论
通过以上10个真实场景示例验证:
| 场景 | 验证结果 | 备注 |
|—–|———|——|
| 排序算法 | ✅ 流畅 | 递归调用自然 |
| 数据统计 | ✅ 流畅 | 遍历和条件组合清晰 |
| 文件操作 | ✅ 流畅 | 异常处理完善 |
| 数学计算 | ✅ 流畅 | 递归和循环都很自然 |
| 字符串处理 | ✅ 流畅 | 字典操作简洁 |
| 面向对象 | ✅ 流畅 | 数据类型模拟类 |
| 递归问题 | ✅ 流畅 | 汉诺塔等经典问题无障碍 |
| 数值算法 | ✅ 流畅 | 素数判断等数值计算直观 |
| 错误处理 | ✅ 流畅 | 自定义错误类型清晰 |
| 查找算法 | ✅ 流畅 | 二分查找等经典算法表达简洁 |
**核心优势验证**:
– 语义密度高:示例代码普遍比Python短30-50%
– 可读性强:代码接近自然语言描述
– 层级清晰:词→句→段→篇结构明确
—
# 第八部分:中文编程语言语法对比研究
本部分详细分析了9个中文编程语言的语法设计,提取精华优化词句段篇语言。
详见:[中文编程语言语法对比研究.md](中文编程语言语法对比研究.md)
## 核心发现摘要
### 十大语法创新
| 排名 | 创新 | 代表语言 | 重要程度 |
|—–|——|———|———|
| 1 | **无空格分词** | 言语言yan、翰语Hanyu | ★★★★★ |
| 2 | **元数驱动解析** | 言语言yan、心语xinyu | ★★★★★ |
| 3 | **双字关键字统一** | 翰语Hanyu、明道Mingdao | ★★★★☆ |
| 4 | **百家姓标识符** | 翰语Hanyu | ★★★★☆ |
| 5 | **主谓宾语序** | 明道Mingdao | ★★★★☆ |
| 6 | **中文管道操作符** | 言语言yan、墨言moyan | ★★★☆☆ |
| 7 | **意合式编程** | 言律yanlv | ★★★☆☆ |
| 8 | **因果链语法** | 言律yanlv | ★★★☆☆ |
| 9 | **中文操作符** | 翰语Hanyu | ★★★☆☆ |
| 10 | **同像性支持** | 言语言yan、墨言moyan | ★★★☆☆ |
### 词句段篇语言优化方向
基于对比研究,词句段篇语言在v1.3.6版本引入以下优化:
1. **统一双字关键字**(决策27)
– `设` → `定义`
– `为` → `等于`
– `若` → `如果`
– `则` → `那么`
2. **元数驱动解析**(决策28)
– 支持无括号函数调用
– 动词自动收集参数
3. **无空格分词**(决策29)
– 类型切换自动分词
– 双字关键词优先匹配
4. **管道操作符统一**(决策30)
– `->` 符号(推荐)
– `,` 中文逗号(兼容)
– `并` 关键字(自然语言)
5. **因果链语法**(决策31,v2.0)
– `条件,动作。` 简化条件判断
– 事件驱动编程
6. **主谓宾语序**(决策32,v2.0实验性)
– `参数, 函数` 符合中文思维
– 管道式处理自然
### 实施优先级
| 优化项 | 优先级 | 版本 | 理由 |
|——-|——–|——|——|
| 双字关键字统一 | 高 | v1.3.6 | 分词零歧义 |
| 元数驱动解析 | 高 | v1.4 | 无括号调用 |
| 无空格分词 | 高 | v1.4 | 中文书写习惯 |
| 管道操作符统一 | 中 | v1.3.6 | 语法一致性 |
| 因果链语法 | 低 | v2.0 | 高级特性 |
| 主谓宾语序 | 低 | v2.0 | 实验性特性 |
—
## 结语
词句段篇编程语言通过以下核心创新,实现了中文编程的真正突破:
1. **语义密度高**:用更少的代码表达更多的含义
2. **数据携带**:句、段可以自带数据
3. **上下文继承**:自动继承父作用域的数据
4. **层级清晰**:词→句→段→篇,自然流畅
5. **可读性强**:代码即文档,易于理解
这些设计决策为后续实现提供了明确的方向,语言核心保持极简,避免过度设计。
**下一步**:实现MVP编译器/解释器,验证设计可行性。
deepseek意见
这份文档用了一年多时间打磨到v1.3.7,在语法设计、层级结构和语义密度上确实做到了相当精细的程度。结合当前市场和技术环境,我从战略定位、技术可行性和商业可行性三个维度逐一分析。
一、市场与技术环境的两个关键变化
变化一:中文编程赛道正在从"个人项目"走向"国家队入场"
2024-2026年短短两年间,中文编程的竞争格局发生了质变。2024年,GB/T 38964-2024中文编程国家标准正式发布,定义了67个中文关键字,标志着中文编程获得了国家层面的标准化认可。同年,华为在开发者大会上正式发布仓颉编程语言,此后仓颉不仅开源,还推出了首个LTS版本,在鸿蒙生态中占据了核心位置。2026年初,字节跳动发布了豆包Seed-2.0-Code AI编程模型,中文代码生成能力大幅提升。
这意味着,中文编程已经不再是几个个人爱好者的"边缘游戏",而是有国家级标准、有巨头生态、有AI大模型加持的正式赛道。2025年版《国产编程语言蓝皮书》共收录了24个自主申报的编程语言项目,涵盖AI原生、嵌入式、前端开发、云原生等多个领域。月兔(MoonBit)在一年内积累了近九千个包、350万级下载量,已开始承接C编译器开发等复杂工程实验。9S芯语更是获得了地方政府支持,已迭代至V10.0.3版本并规划融资1000万至5000万元。
这个赛道正在快速拥挤起来。后发语言如果缺乏差异化的竞争壁垒,将很难获得注意力与资源。
变化二:AI Coding正在从根本上改变"编程语言的必要性"
如果AI Coding只是生成Python代码,那新语言空间有限;但如果AI Coding能直接理解和生成一门自然语言风格的编程语言,情况就完全不同了。
当前技术趋势非常明确:到2025年,代码生成类工具的采纳率已从2023年的17%飙升至83%,具备自主执行能力的智能体工具采纳率达到41%。多模态大语言模型推动技术进入自然语言编程阶段,开发者可通过对话式交互描述功能需求,系统自动生成包含异常处理、日志记录的完整代码模块。行业正从"AI辅助写代码"迈向"自然语言指令→代码生成→检测修复→编译打包→运行出报告"的全自动化闭环。
与此同时,学术界在积极探索大语言模型与领域特定语言的结合路径——DSL-Xpert 2.0和宝马的工业案例研究表明,通过Few-shot学习和微调,LLM可以有效生成和修改DSL代码。
也就是说,在AI Coding的技术浪潮下,语法友好型语言(而非性能导向型语言)的价值可能被重新评估——如果用户可以"用中文写代码",并且大模型可以直接理解和执行这种代码,那编程门槛的降低将产生指数级的放大效应。
二、核心判断:语言设计精良,但战略定位存在结构性矛盾
词句段篇的设计本身没有问题,恰恰相反,它在中文自然语言与编程语法的融合上下了很大功夫。真正的问题是:"通用语言"的定位与"非主流语法"的现实之间存在张力。
文档中的10个示例——快速排序、成绩统计、文件处理、斐波那契等——用词句段篇写出来确实比Python短30-50%【示例库验证结论】。"语义密度高、可读性强、层级清晰"这三个优势,文档已经用充分的代码示例证明了可行性。
但从另一个角度看,这些示例如果翻译成白话文描述,交给Cline/Windsurf或者Copilot等AI编码工具,也可以直接生成可运行的Python/TypeScript代码。在这种情况下,用户为什么还需要专门学习一门新的编程语言、安装新的工具链、维护一个新的代码库?如果答案是"为了体验中文自然语言编程",那当前的"自然语言描述→AI生成代码"的工作流已经能提供类似的体验,且门槛更低。
更深层的风险还在于:"并"同时用作句子内部连接和段落之间管道操作符,语法规则虽在决策20中做了明确区分,但对用户来说这是一个需要额外学习和记忆的认知负担【决策20】。同样,同时支持缩进模式和显式结束。两种块定义模式,虽然增加了灵活性,但也意味着用户需要理解两种语义完全等价但风格不同的写法【决策33】。中文符号和英文符号双模式等价、管道操作符有三种等价写法(-> / , / 并),这些设计在文档层面看起来是灵活性,在实际使用中可能会让新用户感到困惑——"到底该用哪一种?"
从编程语言的历史经验来看,一个明确的结论是:语法自由度越高,学习曲线越陡,社区形成统一风格的成本也越高。Python只用一种缩进方式、只推荐一种命名约定,恰恰是其成功的重要原因。
三、可行性的核心路径:不做通用语言,做垂直领域的中文DSL
尽管上述问题值得警惕,但如果调整战略定位,这个项目完全有可能在特定场景中找到不可替代的价值。
当前一个真实的行业痛点在于:中国3000万+中小企业普遍面临数字化转型成本高、缺少低成本开发工具的困境。与此同时,可乐Go的CokeLang案例给出了极具说服力的证据——通过面向业务领域的DSL,配置变更上线周期从22.3小时降至3.3小时,业务方自主完成常规配置的比例从0%上升到85%。
这说明一个核心趋势:在特定垂直领域,DSL带来的生产力提升可以大到让企业愿意主动学习和采用。
对于词句段篇来说,最有希望的路径可能是:
不做"通用编程语言",而做某个细分领域的中文DSL。
哪些领域最适合?
少儿编程/K12编程教育:这是中文自然语言编程天然的优势场景。孩子不熟悉英文关键字,而词句段篇的层级结构和自然语言风格与Scratch图形化编程的教学理念高度契合。文档引用的9个中文编程语言对比研究中,绝大多数采用缩进定义块和自然语言风格,说明此类设计在教育领域得到了广泛验证。
企业内部业务规则配置/低代码扩展语言:正如CokeLang的例子所证明的,让业务人员能够用母语直接表达业务逻辑,比学习YAML和复杂的配置语法要高效得多。词句段篇的"段"级抽象、"数据携带"等特性非常适合业务规则封装。
AI Agent的工作流描述语言:当前AI Agent普遍需要一种领域特定语言来描述工作流、定义Agent之间的协作关系。华为仓颉已经推出了Agent DSL作为内嵌DSL。词句段篇更偏向自然语言的风格,可能让非技术人员也能编写和调试Agent工作流。
四、结语
词句段篇的设计文档质量很高,但在当前市场环境下,它对资源的需求量级远超一个个人开源项目的能力边界。AI Coding正在重新定义"程序员"的内涵——编程正从精确指令输入演变为意图表达+自动执行。
在这个新范式下,自然语言风格的编程语言确实迎来了一次"价值重估"的窗口期。
但这一轮窗口期不会持续太久。华为仓颉、MoonBit、博流、9S芯语等项目正在快速构建自己的语言、工具链和AI生态系统。两年后再入场的语言,面临的竞争压力将是指数级的。
所以核心建议是:
先行启动MVP,但把战略重心从"做出一门通用语言"调整为"在1-2个垂直领域构建可落地的中文DSL解决方案"。 不要试图复制文档中"词→句→段→篇"的完整通用架构——这种完整恰恰是目前阶段最难以负担的设计野心。
参考月兔(MoonBit)从基础编译器起步逐步扩展到包生态和AI编程的演进路径,以及可乐Go先解决单一业务场景再横向扩展的经验,词句段篇最可行的路线是:先聚焦一个垂直领域(如K12编程教育或企业内部低代码扩展),验证产品市场契合度,再考虑横向扩展语法体系。 在工具链方面,从零自研全套工具对个人开发者几乎不可能,优先对接LLM代码生成生态,让大模型直接理解和生成词句段篇代码,可能是这条赛道上最具杠杆率的选择。
更大的价值,或许在于用中文自然语言风格重新定义人机交互的界面。这正是当前AI Coding趋势的根本逻辑所在。如果词句段篇能够在某个细分场景中证明"非技术人员用中文描述逻辑、系统自动执行"这件事比通用语言+AI助手更高效,那它就有可能走出一条独特的、不可替代的路。

