玄语言是一个基于Python实现的中文编程语言,旨在降低中文使用者的编程学习门槛,同时保留现代编程语言的强大功能和灵活性。
玄语言是一个使用中文关键字和函数名的编程语言,它基于Python的语法结构,但使用中文关键字和标识符,使中文使用者能够更直观地理解和编写代码。玄语言支持现代编程范式,包括面向对象编程、函数式编程和异步编程等。
- 中文关键字和函数名:使用中文作为语言的关键字和内置函数名,降低中文使用者的学习门槛
- 兼容Python语法:基于Python的语法结构,保留了Python的强大功能和灵活性
- 支持现代编程范式:支持面向对象编程、函数式编程、异步编程等现代编程范式
- 丰富的内置功能:提供丰富的内置函数和标准库,涵盖常见的编程需求
- 完善的错误处理:提供详细的错误信息和异常处理机制
- Python 3.6 或更高版本
- 支持 Windows、macOS 和 Linux 系统
- 克隆项目仓库:
git clone https://github.com/Metastem/xuan.git
cd xuan
- 安装依赖:
pip install -r requirements.txt
- 安装玄语言:
pip install -e .
pip install xuan
安装完成后,可以通过以下命令验证安装是否成功:
xuan --version
玄语言的语法基于Python,但使用中文关键字和标识符。以下是玄语言的主要语法特性:
变量名 = 值
例如:
年龄 = 25
姓名 = "张三"
# 这是单行注释
"""
这是多行注释
可以跨越多行
"""
玄语言支持以下基本数据类型:
- 整数:如
1
,100
,-10
- 浮点数:如
3.14
,-0.01
- 字符串:如
"你好"
,'世界'
- 布尔值:
真
和假
- 空值:
空
- 列表:如
[1, 2, 3]
- 字典:如
{"姓名": "张三", "年龄": 25}
- 集合:如
{1, 2, 3}
- 元组:如
(1, 2, 3)
如果 条件:
# 代码块
否则如果 条件:
# 代码块
否则:
# 代码块
例如:
如果 年龄 >= 18:
输出("成年人")
否则:
输出("未成年人")
对于 变量 在 可迭代对象:
# 代码块
例如:
对于 i 在 范围(1, 5):
输出(i)
当 条件:
# 代码块
例如:
i = 0
当 i < 5:
输出(i)
i += 1
- 跳过:跳过当前循环迭代
- 终止:终止整个循环
- 返回:从函数返回值
定义 函数名(参数1, 参数2, ...):
# 函数体
返回 结果
例如:
定义 计算平方(数字):
返回 数字 * 数字
定义 问候(姓名="世界"):
返回 "你好," + 姓名
定义 求和(*数字):
总和 = 0
对于 数 在 数字:
总和 += 数
返回 总和
定义 创建用户(**属性):
用户 = {}
对于 键, 值 在 属性.项目():
用户[键] = 值
返回 用户
类 类名:
定义 初始化(自身, 参数1, 参数2, ...):
自身.属性1 = 参数1
自身.属性2 = 参数2
定义 方法名(自身, 参数1, 参数2, ...):
# 方法体
返回 结果
例如:
类 人:
定义 初始化(自身, 姓名, 年龄):
自身.姓名 = 姓名
自身.年龄 = 年龄
定义 介绍(自身):
返回 f"我叫{自身.姓名},今年{自身.年龄}岁。"
类 子类(父类):
定义 初始化(自身, 参数1, 参数2, ...):
父类.初始化(自身, 参数1, ...)
自身.属性 = 值
例如:
类 学生(人):
定义 初始化(自身, 姓名, 年龄, 学号):
人.初始化(自身, 姓名, 年龄)
自身.学号 = 学号
定义 介绍(自身):
返回 f"我叫{自身.姓名},今年{自身.年龄}岁,学号是{自身.学号}。"
尝试:
# 可能引发异常的代码
捕获 异常类型 作为 异常变量:
# 处理异常的代码
最后:
# 无论是否发生异常都会执行的代码
例如:
尝试:
数字 = 整数(输入("请输入一个数字:"))
结果 = 10 / 数字
输出(f"10 除以 {数字} 等于 {结果}")
捕获 值错误:
输出("输入的不是有效的数字!")
捕获 零除错误:
输出("不能除以零!")
最后:
输出("计算结束。")
导入 模块名
从 模块名 导入 函数名1, 函数名2, ...
从 模块名 导入 *
例如:
导入 数学
从 随机 导入 随机数, 随机整数
使用 打开文件("文件名", "模式") 作为 文件:
内容 = 文件.读取()
# 处理文件内容
例如:
尝试:
使用 打开文件("data.txt", "r") 作为 文件:
内容 = 文件.读取()
输出(内容)
捕获 文件未找到错误:
输出("文件不存在!")
[表达式 对于 变量 在 可迭代对象 如果 条件]
例如:
平方列表 = [x * x 对于 x 在 范围(1, 6)] # [1, 4, 9, 16, 25]
偶数平方 = [x * x 对于 x 在 范围(1, 11) 如果 x % 2 == 0] # [4, 16, 36, 64, 100]
{键表达式: 值表达式 对于 变量 在 可迭代对象 如果 条件}
例如:
平方字典 = {x: x * x 对于 x 在 范围(1, 6)} # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
定义 生成器函数():
对于 i 在 范围(10):
产出 i
例如:
定义 斐波那契(n):
a, b = 0, 1
对于 _ 在 范围(n):
产出 a
a, b = b, a + b
定义 装饰器(函数):
定义 包装(*参数, **关键字参数):
# 前置处理
结果 = 函数(*参数, **关键字参数)
# 后置处理
返回 结果
返回 包装
@装饰器
定义 被装饰函数():
# 函数体
例如:
定义 计时器(函数):
定义 包装(*参数, **关键字参数):
开始时间 = 当前时间()
结果 = 函数(*参数, **关键字参数)
结束时间 = 当前时间()
输出(f"函数 {函数.__名称__} 执行时间: {结束时间 - 开始时间} 秒")
返回 结果
返回 包装
@计时器
定义 耗时函数():
睡眠(1)
返回 "完成"
异步 定义 异步函数():
# 异步操作
等待 异步操作()
返回 结果
例如:
异步 定义 获取数据(url):
等待 睡眠(1) # 模拟网络请求
返回 f"来自 {url} 的数据"
异步 定义 主函数():
结果 = 等待 获取数据("https://example.com")
输出(结果)
玄语言提供了丰富的内置函数,这些函数使用中文命名,便于中文使用者理解和使用。以下是主要的内置函数分类:
- 输出(值):打印值到标准输出
- 输入(提示=None):从标准输入读取一行
- 打印(值):与输出相同,打印值到标准输出
- 整数(值):将值转换为整数
- 浮点数(值):将值转换为浮点数
- 字符串(值):将值转换为字符串
- 布尔(值):将值转换为布尔值
- 列表(值):将值转换为列表
- 字典(值):将值转换为字典
- 集合(值):将值转换为集合
- 元组(值):将值转换为元组
- 绝对值(数字):返回数字的绝对值
- 最大值(*值):返回最大值
- 最小值(*值):返回最小值
- 总和(可迭代对象):返回可迭代对象中所有元素的和
- 幂(底数, 指数):返回底数的指数次方
- 四舍五入(数字, 小数位=0):对数字进行四舍五入
- 向上取整(数字):返回大于或等于数字的最小整数
- 向下取整(数字):返回小于或等于数字的最大整数
- 平方根(数字):返回数字的平方根
- 对数(数字, 底数=10):返回以指定底数的对数
- 正弦(角度):返回角度的正弦值(角度以弧度为单位)
- 余弦(角度):返回角度的余弦值(角度以弧度为单位)
- 正切(角度):返回角度的正切值(角度以弧度为单位)
- 阶乘(数字):返回数字的阶乘
- 随机数():返回0到1之间的随机浮点数
- 随机整数(最小值, 最大值):返回指定范围内的随机整数
- 随机选择(序列):从序列中随机选择一个元素
- 随机打乱(序列):随机打乱序列中的元素
- 随机样本(序列, 数量):从序列中随机选择指定数量的元素
- 范围(开始, 结束=None, 步长=1):创建一个数字序列
- 长度(序列):返回序列的长度
- 排序(序列, 反向=False):对序列进行排序
- 反转(序列):反转序列中的元素顺序
- 枚举(序列):返回序列中的索引和值对
- 过滤(函数, 序列):使用函数过滤序列中的元素
- 映射(函数, 序列):对序列中的每个元素应用函数
- 压缩(*序列):将多个序列打包成元组对的列表
- 链接(*序列):将多个序列连接成一个序列
- 分割(字符串, 分隔符=None):将字符串按分隔符分割
- 连接(序列, 分隔符=""):使用分隔符将序列中的字符串连接
- 替换(字符串, 旧值, 新值, 次数=-1):替换字符串中的子串
- 去除空白(字符串):去除字符串两端的空白字符
- 左对齐(字符串, 宽度):左对齐字符串
- 右对齐(字符串, 宽度):右对齐字符串
- 居中对齐(字符串, 宽度):居中对齐字符串
- 是数字(字符串):检查字符串是否只包含数字
- 是字母(字符串):检查字符串是否只包含字母
- 是字母数字(字符串):检查字符串是否只包含字母和数字
- 大写(字符串):将字符串转换为大写
- 小写(字符串):将字符串转换为小写
- 首字母大写(字符串):将字符串的首字母转换为大写
- 打开文件(文件名, 模式="r"):打开文件并返回文件对象
- 读取文件(文件名):读取整个文件内容
- 写入文件(文件名, 内容):将内容写入文件
- 追加文件(文件名, 内容):将内容追加到文件末尾
- 文件存在(路径):检查文件是否存在
- 删除文件(路径):删除指定文件
- 创建目录(路径):创建目录
- 删除目录(路径):删除目录
- 列出目录(路径):列出目录中的文件和子目录
- 当前时间():返回当前时间戳
- 睡眠(秒数):暂停执行指定的秒数
- 系统命令(命令):执行系统命令
- 环境变量(名称):获取环境变量的值
- 设置环境变量(名称, 值):设置环境变量的值
- 退出(状态码=0):退出程序
- 获取平台():获取当前操作系统平台
- 获取Python版本():获取Python解释器版本
# hello_world.xuan
输出("你好,世界!")
# fibonacci.xuan
定义 斐波那契(n):
如果 n <= 0:
返回 []
否则如果 n == 1:
返回 [0]
否则如果 n == 2:
返回 [0, 1]
结果 = [0, 1]
对于 i 在 范围(2, n):
结果.添加(结果[i-1] + 结果[i-2])
返回 结果
# 生成前10个斐波那契数
数列 = 斐波那契(10)
输出(f"斐波那契数列: {数列}")
# todo_manager.xuan
类 待办事项:
定义 初始化(自身):
自身.任务列表 = []
定义 添加任务(自身, 任务):
自身.任务列表.添加({"任务": 任务, "完成": 假})
输出(f"已添加任务:{任务}")
定义 完成任务(自身, 索引):
如果 0 <= 索引 < 长度(自身.任务列表):
自身.任务列表[索引]["完成"] = 真
输出(f"已完成任务:{自身.任务列表[索引]['任务']}")
否则:
输出("无效的任务索引!")
定义 显示任务(自身):
如果 长度(自身.任务列表) == 0:
输出("没有待办任务。")
返回
输出("\n待办事项列表:")
对于 i, 任务 在 枚举(自身.任务列表):
状态 = "✓" 如果 任务["完成"] 否则 " "
输出(f"{i+1}. [{状态}] {任务['任务']}")
# 使用示例
管理器 = 待办事项()
管理器.添加任务("学习玄语言")
管理器.添加任务("完成项目文档")
管理器.添加任务("准备演示")
管理器.显示任务()
管理器.完成任务(0)
管理器.显示任务()
xuan/
├── xuan/ # 核心源代码
│ ├── __init__.py # 包初始化文件
│ ├── lexer.py # 词法分析器
│ ├── parser.py # 语法分析器
│ ├── ast.py # 抽象语法树
│ ├── interpreter.py # 解释器
│ ├── builtins.py # 内置函数
│ ├── exceptions.py # 异常定义
│ └── cli.py # 命令行接口
├── requirements.txt # 依赖要求
├── README.md # 项目说明
└── LICENSE # 许可证
- lexer.py: 词法分析器,将源代码转换为标记流
- parser.py: 语法分析器,将标记流转换为抽象语法树
- ast.py: 定义抽象语法树的节点类型
- interpreter.py: 解释器,执行抽象语法树
- builtins.py: 实现内置函数和类型
- exceptions.py: 定义自定义异常类型
- cli.py: 实现命令行接口
- 克隆仓库并安装依赖:
git clone https://github.com/Metastem/xuan.git
cd xuan
pip install -r requirements.txt
pip install -e .
- 运行测试:
python -m pytest tests/
- Fork 项目仓库
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
- 遵循 PEP 8 编码规范
- 使用有意义的变量名和函数名
- 添加适当的注释和文档字符串
- 确保所有测试通过
<类型>: <描述>
[可选的正文]
[可选的脚注]
类型可以是:
- feat: 新功能
- fix: 错误修复
- docs: 文档更改
- style: 代码风格更改
- refactor: 代码重构
- test: 测试相关
- chore: 构建过程或辅助工具的变动
- 初始版本发布
- 实现基本语言特性
- 添加内置函数库
- 提供示例程序
- 添加更多内置函数
- 优化解释器性能
- 添加更多语言特性
- 改进错误处理和调试功能
- 开发IDE插件
- 完善文档和教程