Skip to content

Metastem/Xuan

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎭

玄语言是一个基于Python实现的中文编程语言,旨在降低中文使用者的编程学习门槛,同时保留现代编程语言的强大功能和灵活性。

目录

项目简介

玄语言是一个使用中文关键字和函数名的编程语言,它基于Python的语法结构,但使用中文关键字和标识符,使中文使用者能够更直观地理解和编写代码。玄语言支持现代编程范式,包括面向对象编程、函数式编程和异步编程等。

主要特点

  • 中文关键字和函数名:使用中文作为语言的关键字和内置函数名,降低中文使用者的学习门槛
  • 兼容Python语法:基于Python的语法结构,保留了Python的强大功能和灵活性
  • 支持现代编程范式:支持面向对象编程、函数式编程、异步编程等现代编程范式
  • 丰富的内置功能:提供丰富的内置函数和标准库,涵盖常见的编程需求
  • 完善的错误处理:提供详细的错误信息和异常处理机制

安装方法

系统要求

  • Python 3.6 或更高版本
  • 支持 Windows、macOS 和 Linux 系统

从源代码安装

  1. 克隆项目仓库:
git clone https://github.com/Metastem/xuan.git cd xuan
  1. 安装依赖:
pip install -r requirements.txt
  1. 安装玄语言:
pip install -e .

使用 pip 安装

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

# 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: 实现命令行接口

开发者指南

环境设置

  1. 克隆仓库并安装依赖:
git clone https://github.com/Metastem/xuan.git cd xuan pip install -r requirements.txt pip install -e .
  1. 运行测试:
python -m pytest tests/

代码贡献指南

  1. Fork 项目仓库
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建 Pull Request

代码风格

  • 遵循 PEP 8 编码规范
  • 使用有意义的变量名和函数名
  • 添加适当的注释和文档字符串
  • 确保所有测试通过

提交消息规范

<类型>: <描述> [可选的正文] [可选的脚注] 

类型可以是:

  • feat: 新功能
  • fix: 错误修复
  • docs: 文档更改
  • style: 代码风格更改
  • refactor: 代码重构
  • test: 测试相关
  • chore: 构建过程或辅助工具的变动

更新日志

v0.1.0 (2025-6-16)

  • 初始版本发布
  • 实现基本语言特性
  • 添加内置函数库
  • 提供示例程序

未来计划

  • 添加更多内置函数
  • 优化解释器性能
  • 添加更多语言特性
  • 改进错误处理和调试功能
  • 开发IDE插件
  • 完善文档和教程

Contributors

Languages