| name | wenyan-lang |
| description | 文言编程语言(Wenyan)的完整语言规范。包含白名单(允许的语法全集)、黑名单(禁止的语法全集)、 BNF语法规则和可运行示例。触发词:wenyan, 文言, 文言编程, wy-lang。 仅当任务涉及文言语言代码时使用——请勿为一般中文文本或java激活。
|
文言编程语言规范
目录结构
本技能组织如下:
.opencode/skills/wenyan-lang/
SKILL.md # 本文件——完整语言规范
examples/ # 可运行的文言示例程序(编号)
01-hello-world.wy
02-variables-arithmetic.wy
03-conditionals.wy
04-loop-array.wy
05-function.wy
06-object-class.wy
07-async.wy
08-array-operations.wy
09-logic.wy
10-module-import.wy
reference/
bnf-grammar.md # 完整的ANTLR4 BNF语法规范
白名单:唯一允许的语法全集
数据类型
| 标记 | 含义 |
|---|
數 | 数字(整数、小数、负数) |
言 | 字符串(双引号包裹) |
爻 | 布尔值(陰=假 陽=真) |
列 | 数组(可变列表) |
物 | 对象(类实例) |
術 | 函数(一等公民) |
变量声明
吾有一數 曰三。名之曰「甲」。 — 声明数字变量
吾有一言 曰「「文本」」。名之曰「乙」。 — 声明字符串变量
吾有一爻 曰陽。名之曰「丙」。 — 声明布尔变量
吾有一列。名之曰「丁」。 — 声明数组变量
吾有一物。名之曰「戊」。 — 声明对象变量
吾有一術。名之曰「己」。 — 声明函数变量
有數十三。名之曰「甲」。 — 简化声明
夫十三。名之曰「甲」。 — 使用夫声明
吾有二數 曰十三 曰十五。名之曰「甲」曰「乙」。 — 多变量声明
赋值
夫三。予之以「甲」。 — 重新赋值
夫三。予之以「甲」。予之以「乙」。 — 链式赋值
昔之「甲」者 不復存矣。 — 赋空值
运算符
算术运算符: 加(加)、減(减)、乘(乘)、除(除)、所餘幾何(模)
逻辑运算符: 且(与)、或(或)、變(非)、中無陰乎(布尔与)、中有陽乎(布尔或)
比较运算符: 等於(等于)、不等於(不等于)、大於(大于)、小於(小于)、不大於(小于等于)、不小於(大于等于)
数组运算符: 充(添加元素)、銜(合并数组)、長(数组长度)
一元运算符: 變陰(取反布尔值)
控制流
条件判断:
若「甲」大於五十者。...云云。 — 简单if
若...者...若非...也。 — if-else
若...者...或若...者...若非...云云。 — if-elif-else
循环:
恆為是。...云云。 — 无限循环
為是百遍。...云云。 — 计数循环
凡「列」中之「元」。...云云。 — 数组遍历
乃止 — 跳出循环
乃止是遍 — 跳过本轮
函数
函数定义:
吾有一術。名之曰「法」。是術曰。...是謂「法」之術也。 — 无参数函数
吾有一術 名之曰「三法」。欲行是術 必先得 二數曰「甲」曰「乙」。一言曰「丙」。是術曰。...是謂「三法」之術也。 — 带参数函数
同有一術。名之曰「異步法」。... — 异步函数
函数调用:
施「法」於一於四。 — 直接调用
夫一。夫四。取三以施「法」。 — 堆栈调用
加一以二 — 关键字函数调用
待「甲」 — 异步等待
返回值:
乃得一 — 返回值
乃得矣 — 返回最后计算结果
乃歸 — 无返回值退出
对象系统
类定义:
吾有一物。名之曰「物」。其物如是。...是謂「物」之物也。 — 类定义
吾有一物繼「物」。名之曰「子物」。... — 继承
成员定义:
物之「甲」者數 曰二。 — 静态属性
物之造者術 是術曰。... — 构造函数
物之「甲」者術 ... — 方法
实例化:
造「物」。名之曰「甲」。 — 创建实例
施「物」。名之曰「乙」。 — 调用构造函数
特殊变量: 己(当前实例)、父(父类类型)
模块导入
吾嘗觀「甲」之書。 — 导入整个模块
吾嘗觀「甲」之書。方悟「乙」「丙」之義。 — 选择性导入
吾嘗觀「甲」之書。名之曰「乙」。 — 导入并命名
注释
注曰「「注释」」
疏曰「「注释」」
批曰「「注释」」
特殊语句
| 标记 | 含义 |
|---|
噫 | 刷新输出缓冲区 |
書 | 输出函数 |
其 | 引用前一个结果(弹出堆栈) |
之 | 引用前一个结果(不弹出堆栈) |
取 N 以 | 从堆栈取N个参数 |
作用域规则
- 使用
吾有 或 有 声明的变量在当前作用域有效
- 函数内部可以访问外部变量(闭包)
- 函数内部声明的变量在函数返回时销毁
黑名单:绝对禁止的语法全集
以下语法特性在本方言中完全禁止:
控制结构
for — 使用 為是...遍 或 凡...中之 代替
while — 使用 恆為是 代替
switch — 使用 或若 链代替
do...while
变量与赋值
- 变量重新赋值(除了使用
昔之...者 今...是矣 语法)
- 可变变量(所有变量默认不可变,只能通过显式赋值语句修改)
- 变量声明不使用
吾有、有 或 夫 前缀
- 变量名不使用中文引号
「」 包裹
类型系统
class — 使用 吾有一物
extends — 使用 繼
new — 使用 造 或 施
typeof、instanceof
函数
function — 使用 吾有一術
=> 箭头函数
arguments 对象
- 默认参数值
- 解构赋值
操作符
++、-- — 使用显式加减
% — 使用 所餘幾何
&&、||、! — 使用 且、或、變
===、!==
** 幂操作符
- 位操作符(
&、|、^、~、<<、>>、>>>)
语法特性
- 三元操作符
? :
- 模板字符串 — 使用字符串拼接
- 解构赋值
- 展开操作符
...
- 可选链
?.
- 空值合并
??
yield 和生成器
async/await — 使用 同有 和 待
对象与数组
- 对象字面量
{key: value} — 使用对象定义和构造函数
- 数组字面量
[1,2,3] — 使用 充 构建
- 点号属性访问
obj.key — 使用 之:夫「obj」之「key」
- 方括号属性访问
obj["key"] — 同上
其他
- 分号
;
- 大括号
{} — 使用缩进和 云云
try...catch...finally
import/export ES6模块语法 — 使用 吾嘗觀
require CommonJS语法
eval、setTimeout、setInterval 等宿主环境API
示例
examples/ 目录下包含10个可运行的文言程序:
| # | 文件 | 说明 |
|---|
| 1 | examples/01-hello-world.wy | 输出"問天地好在"三次 |
| 2 | examples/02-variables-arithmetic.wy | 算术运算之和差积商 |
| 3 | examples/03-conditionals.wy | 条件判断逻辑 |
| 4 | examples/04-loop-array.wy | 数组遍历 |
| 5 | examples/05-function.wy | 函数定义与调用 |
| 6 | examples/06-object-class.wy | 类定义与实例化 |
| 7 | examples/07-async.wy | 异步函数与等待 |
| 8 | examples/08-array-operations.wy | 数组合并与访问 |
| 9 | examples/09-logic.wy | 布尔代数运算 |
| 10 | examples/10-module-import.wy | 模块导入与使用 |
文法(BNF)
完整的 ANTLR4 BNF 文法见 reference/bnf-grammar.md。关键令牌映射:
| 令牌 | 文言 |
|---|
ADD | 加 |
SUB | 減 |
MUL | 乘 |
DIV | 除 |
AND | 且 |
OR | 或 |
UNARY_OP | 變 |
EQ / NEQ | 等於 / 不等於 |
GT / LT | 大於 / 小於 |
GTE / LTE | 不小於 / 不大於 |
IF_ / ELIF / ELSE_ | 若 / 或若 / 若非 |
LOCAL_DECLARE_OP | 吾有 |
GLOBAL_DECLARE_OP | 今有 |
ASYNC_DECLARE_OP | 同有 |
CALLING_FUNCTION | 施 |
CREATE_OBJECT | 造 |
EXTENDS | 繼 |
NAMING | 名之 |
FU | 夫 |
YUE | 曰 |
ZHI | 之 |
ZHE | 者 |
FOR_IF_END | 云云 / 是也 / 也 |
RETURN | 乃得 |
RETURN_LAST | 乃得矣 |
RETURN_NULL | 乃歸 |