diff --git a/docs/docs/index.md b/docs/docs/index.md new file mode 100644 index 0000000..02337a2 --- /dev/null +++ b/docs/docs/index.md @@ -0,0 +1,85 @@ +# Oraset 编程语言 + +## 什么是 Oraset? + +Oraset 是一种简单、强大、跨平台的编程语言,设计目标是提供一种易于学习和使用的编程工具。它具有以下特点: + +- **简单易学**:语法简洁明了,适合初学者 +- **跨平台**:支持 Windows 和 Linux 操作系统 +- **强大功能**:支持变量、表达式、条件语句、循环、函数、类等核心功能 +- **内置库**:提供数学、字符串、数组、工具等实用库 +- **文件打包**:支持将代码打包为加密的 .osp 二进制文件 + +## 快速开始 + +### 安装 Oraset + +1. 克隆或下载 Oraset 源码到本地 +2. 确保你的系统已安装 Python 3.6 或更高版本 +3. 进入 Oraset 目录,直接运行 `oraset.py` 文件 + +### 运行你的第一个程序 + +创建一个名为 `hello.oraset` 的文件,内容如下: + +```oraset +show(`Hello, Oraset!`); +``` + +然后运行: + +```bash +python oraset.py hello.oraset +``` + +你将看到输出: + +``` +Hello, Oraset! +``` + +## 核心特性 + +### 语法特点 +- 使用反引号 `` ` `` 表示字符串 +- 使用 `show` 代替 `print` 进行输出 +- 使用 `@` 导入库 +- 支持分号作为语句结束符 + +### 基本数据类型 +- 数字(整数和浮点数) +- 字符串 +- 数组 +- 布尔值 + +### 控制结构 +- 条件语句:`if`、`else`、`else if` +- 循环语句:`while` + +### 函数和类 +- 函数定义:`def function_name(params) { ... }` +- 类定义:`class ClassName { ... }` + +### 内置库 +- `@math` - 数学库 +- `@string` - 字符串库 +- `@array` - 数组库 +- `@util` - 工具库 + +## 学习资源 + +- **快速开始**:[快速开始教程](tutorial/quickstart.md) +- **基本语法**:[基本语法教程](tutorial/basic-syntax.md) +- **控制结构**:[控制结构教程](tutorial/control-structures.md) +- **函数和类**:[函数和类教程](tutorial/functions-and-classes.md) +- **库参考**:[库参考文档](libraries/math.md) + +## 社区 + +- [GitHub 仓库](https://github.com/Oraset/oraset) - 源代码和贡献 +- [论坛](https://bbs.ecuil.com) - 讨论和帮助 +- [Issue 追踪](https://github.com/Oraset/oraset/issues) - 报告问题 + +## 许可证 + +Oraset 使用 GNU 通用公共许可证 v3.0。 \ No newline at end of file diff --git a/docs/docs/libraries/array.md b/docs/docs/libraries/array.md new file mode 100644 index 0000000..590cdc2 --- /dev/null +++ b/docs/docs/libraries/array.md @@ -0,0 +1,318 @@ +# 数组库 + +## 简介 + +数组库(`@array`)提供了一系列数组操作函数,包括数组长度获取、元素添加、删除、查找、排序等功能。 + +## 导入方式 + +```oraset +@array; +``` + +## 函数参考 + +### 基本数组操作 + +#### array.length(arr) + +获取数组长度。 + +**参数:** +- `arr` - 数组 + +**返回值:** +- 数组的长度 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result = array.length(fruits); +show(`Array length: `, result); !! 输出: 3 +``` + +#### array.push(arr, item) + +向数组末尾添加一个元素。 + +**参数:** +- `arr` - 数组 +- `item` - 要添加的元素 + +**返回值:** +- 添加元素后的新数组 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`); +result = array.push(fruits, `cherry`); +show(`After push: `, result); !! 输出: ["apple", "banana", "cherry"] +``` + +#### array.pop(arr) + +移除数组末尾的元素。 + +**参数:** +- `arr` - 数组 + +**返回值:** +- 移除元素后的新数组 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result = array.pop(fruits); +show(`After pop: `, result); !! 输出: ["apple", "banana"] +``` + +#### array.shift(arr) + +移除数组开头的元素。 + +**参数:** +- `arr` - 数组 + +**返回值:** +- 移除元素后的新数组 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result = array.shift(fruits); +show(`After shift: `, result); !! 输出: ["banana", "cherry"] +``` + +#### array.unshift(arr, item) + +向数组开头添加一个元素。 + +**参数:** +- `arr` - 数组 +- `item` - 要添加的元素 + +**返回值:** +- 添加元素后的新数组 + +**示例:** + +```oraset +@array; + +fruits = arr(`banana`, `cherry`); +result = array.unshift(fruits, `apple`); +show(`After unshift: `, result); !! 输出: ["apple", "banana", "cherry"] +``` + +### 数组查找 + +#### array.indexOf(arr, item) + +查找元素在数组中的位置。 + +**参数:** +- `arr` - 数组 +- `item` - 要查找的元素 + +**返回值:** +- 元素的索引,未找到返回 -1 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result1 = array.indexOf(fruits, `banana`); +result2 = array.indexOf(fruits, `orange`); +show(`Index of 'banana': `, result1); !! 输出: 1 +show(`Index of 'orange': `, result2); !! 输出: -1 +``` + +#### array.lastIndexOf(arr, item) + +从数组末尾开始查找元素的位置。 + +**参数:** +- `arr` - 数组 +- `item` - 要查找的元素 + +**返回值:** +- 元素的索引,未找到返回 -1 + +**示例:** + +```oraset +@array; + +numbers = arr(1, 2, 3, 2, 1); +result = array.lastIndexOf(numbers, 2); +show(`Last index of 2: `, result); !! 输出: 3 +``` + +#### array.includes(arr, item) + +检查数组是否包含指定元素。 + +**参数:** +- `arr` - 数组 +- `item` - 要检查的元素 + +**返回值:** +- 布尔值,表示数组是否包含指定元素 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result1 = array.includes(fruits, `banana`); +result2 = array.includes(fruits, `orange`); +show(`Includes 'banana': `, result1); !! 输出: true +show(`Includes 'orange': `, result2); !! 输出: false +``` + +### 数组转换 + +#### array.join(arr, sep) + +将数组元素连接成一个字符串。 + +**参数:** +- `arr` - 数组 +- `sep` - 分隔符 + +**返回值:** +- 连接后的字符串 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result = array.join(fruits, `, `); +show(`Joined: `, result); !! 输出: apple, banana, cherry +``` + +#### array.reverse(arr) + +反转数组元素的顺序。 + +**参数:** +- `arr` - 数组 + +**返回值:** +- 反转后的新数组 + +**示例:** + +```oraset +@array; + +fruits = arr(`apple`, `banana`, `cherry`); +result = array.reverse(fruits); +show(`Reversed: `, result); !! 输出: ["cherry", "banana", "apple"] +``` + +#### array.sort(arr) + +对数组元素进行排序。 + +**参数:** +- `arr` - 数组 + +**返回值:** +- 排序后的新数组 + +**示例:** + +```oraset +@array; + +numbers = arr(3, 1, 4, 1, 5, 9, 2, 6); +result = array.sort(numbers); +show(`Sorted: `, result); !! 输出: [1, 1, 2, 3, 4, 5, 6, 9] + +fruits = arr(`cherry`, `apple`, `banana`); +result = array.sort(fruits); +show(`Sorted fruits: `, result); !! 输出: ["apple", "banana", "cherry"] +``` + +#### array.slice(arr, start, end) + +提取数组的一部分。 + +**参数:** +- `arr` - 数组 +- `start` - 起始索引(从0开始) +- `end` - 结束索引(不包含) + +**返回值:** +- 提取的子数组 + +**示例:** + +```oraset +@array; + +numbers = arr(0, 1, 2, 3, 4, 5); +result1 = array.slice(numbers, 2, 4); +result2 = array.slice(numbers, 1); +show(`Slice (2-4): `, result1); !! 输出: [2, 3] +show(`Slice (1+): `, result2); !! 输出: [1, 2, 3, 4, 5] +``` + +## 示例代码 + +```oraset +@array; + +!! 创建数组 +fruits = arr(`apple`, `banana`, `cherry`); +show(`Original array: `, fruits); + +!! 基本操作 +show(`Length: `, array.length(fruits)); +show(`After push: `, array.push(fruits, `orange`)); +show(`After pop: `, array.pop(fruits)); +show(`After unshift: `, array.unshift(fruits, `grape`)); +show(`After shift: `, array.shift(fruits)); + +!! 查找操作 +show(`Index of 'banana': `, array.indexOf(fruits, `banana`)); +show(`Last index of 'banana': `, array.lastIndexOf(fruits, `banana`)); +show(`Includes 'cherry': `, array.includes(fruits, `cherry`)); + +!! 转换操作 +show(`Joined: `, array.join(fruits, ` | `)); +show(`Reversed: `, array.reverse(fruits)); + +!! 排序操作 +numbers = arr(5, 2, 8, 1, 9); +show(`Original numbers: `, numbers); +show(`Sorted numbers: `, array.sort(numbers)); + +!! 切片操作 +show(`Slice (1-3): `, array.slice(numbers, 1, 3)); +``` + +## 注意事项 + +- 所有数组操作函数都返回一个新的数组,不会修改原始数组 +- 数组索引从0开始 +- 数组元素可以是不同类型的值 +- 对于大型数组,某些操作(如排序)可能会影响性能 \ No newline at end of file diff --git a/docs/docs/libraries/math.md b/docs/docs/libraries/math.md new file mode 100644 index 0000000..0aa62d7 --- /dev/null +++ b/docs/docs/libraries/math.md @@ -0,0 +1,454 @@ +# 数学库 + +## 简介 + +数学库(`@math`)提供了一系列数学运算函数,包括基本运算、三角函数、随机数生成等。 + +## 导入方式 + +```oraset +@math; +``` + +## 函数参考 + +### 基本数学函数 + +#### math.abs(x) + +计算绝对值。 + +**参数:** +- `x` - 数字 + +**返回值:** +- 数字的绝对值 + +**示例:** + +```oraset +@math; + +show(`abs(-123) = `, math.abs(-123)); !! 输出: 123 +``` + +#### math.sqrt(x) + +计算平方根。 + +**参数:** +- `x` - 非负数 + +**返回值:** +- 平方根值 + +**示例:** + +```oraset +@math; + +show(`sqrt(16) = `, math.sqrt(16)); !! 输出: 4 +``` + +#### math.pow(x, y) + +计算 x 的 y 次方。 + +**参数:** +- `x` - 底数 +- `y` - 指数 + +**返回值:** +- x 的 y 次方 + +**示例:** + +```oraset +@math; + +show(`pow(2, 3) = `, math.pow(2, 3)); !! 输出: 8 +``` + +#### math.exp(x) + +计算 e 的 x 次方。 + +**参数:** +- `x` - 指数 + +**返回值:** +- e 的 x 次方 + +**示例:** + +```oraset +@math; + +show(`exp(1) = `, math.exp(1)); !! 输出: 2.718281828459045 +``` + +#### math.log(x) + +计算自然对数。 + +**参数:** +- `x` - 正数 + +**返回值:** +- 自然对数值 + +**示例:** + +```oraset +@math; + +show(`log(e) = `, math.log(math.exp(1))); !! 输出: 1 +``` + +#### math.log10(x) + +计算以 10 为底的对数。 + +**参数:** +- `x` - 正数 + +**返回值:** +- 以 10 为底的对数值 + +**示例:** + +```oraset +@math; + +show(`log10(100) = `, math.log10(100)); !! 输出: 2 +``` + +### 三角函数 + +#### math.sin(x) + +计算正弦值(角度)。 + +**参数:** +- `x` - 角度 + +**返回值:** +- 正弦值 + +**示例:** + +```oraset +@math; + +show(`sin(90) = `, math.sin(90)); !! 输出: 1 +``` + +#### math.cos(x) + +计算余弦值(角度)。 + +**参数:** +- `x` - 角度 + +**返回值:** +- 余弦值 + +**示例:** + +```oraset +@math; + +show(`cos(0) = `, math.cos(0)); !! 输出: 1 +``` + +#### math.tan(x) + +计算正切值(角度)。 + +**参数:** +- `x` - 角度 + +**返回值:** +- 正切值 + +**示例:** + +```oraset +@math; + +show(`tan(45) = `, math.tan(45)); !! 输出: 1 +``` + +#### math.asin(x) + +计算反正弦值(返回角度)。 + +**参数:** +- `x` - 值(-1 到 1 之间) + +**返回值:** +- 反正弦角度 + +**示例:** + +```oraset +@math; + +show(`asin(1) = `, math.asin(1)); !! 输出: 90 +``` + +#### math.acos(x) + +计算反余弦值(返回角度)。 + +**参数:** +- `x` - 值(-1 到 1 之间) + +**返回值:** +- 反余弦角度 + +**示例:** + +```oraset +@math; + +show(`acos(1) = `, math.acos(1)); !! 输出: 0 +``` + +#### math.atan(x) + +计算反正切值(返回角度)。 + +**参数:** +- `x` - 值 + +**返回值:** +- 反正切角度 + +**示例:** + +```oraset +@math; + +show(`atan(1) = `, math.atan(1)); !! 输出: 45 +``` + +### 数学常数 + +#### math.pi() + +返回圆周率 π。 + +**参数:** +- 无 + +**返回值:** +- 圆周率 π 值 + +**示例:** + +```oraset +@math; + +show(`π = `, math.pi()); !! 输出: 3.141592653589793 +``` + +#### math.e() + +返回自然对数的底 e。 + +**参数:** +- 无 + +**返回值:** +- 自然对数的底 e 值 + +**示例:** + +```oraset +@math; + +show(`e = `, math.e()); !! 输出: 2.718281828459045 +``` + +### 取整函数 + +#### math.floor(x) + +向下取整。 + +**参数:** +- `x` - 数字 + +**返回值:** +- 向下取整后的整数 + +**示例:** + +```oraset +@math; + +show(`floor(3.9) = `, math.floor(3.9)); !! 输出: 3 +show(`floor(-3.1) = `, math.floor(-3.1)); !! 输出: -4 +``` + +#### math.ceil(x) + +向上取整。 + +**参数:** +- `x` - 数字 + +**返回值:** +- 向上取整后的整数 + +**示例:** + +```oraset +@math; + +show(`ceil(3.1) = `, math.ceil(3.1)); !! 输出: 4 +show(`ceil(-3.9) = `, math.ceil(-3.9)); !! 输出: -3 +``` + +#### math.round(x) + +四舍五入。 + +**参数:** +- `x` - 数字 + +**返回值:** +- 四舍五入后的整数 + +**示例:** + +```oraset +@math; + +show(`round(3.1) = `, math.round(3.1)); !! 输出: 3 +show(`round(3.6) = `, math.round(3.6)); !! 输出: 4 +``` + +### 最值函数 + +#### math.max(...args) + +返回多个数字中的最大值。 + +**参数:** +- `...args` - 多个数字 + +**返回值:** +- 最大值 + +**示例:** + +```oraset +@math; + +show(`max(10, 5, 20) = `, math.max(10, 5, 20)); !! 输出: 20 +``` + +#### math.min(...args) + +返回多个数字中的最小值。 + +**参数:** +- `...args` - 多个数字 + +**返回值:** +- 最小值 + +**示例:** + +```oraset +@math; + +show(`min(10, 5, 20) = `, math.min(10, 5, 20)); !! 输出: 5 +``` + +### 随机数 + +#### math.random() + +生成 0 到 1 之间的随机小数。 + +**参数:** +- 无 + +**返回值:** +- 0 到 1 之间的随机小数 + +**示例:** + +```oraset +@math; + +show(`random() = `, math.random()); !! 输出: 0.123456789 +``` + +#### math.randint(a, b) + +生成指定范围内的随机整数。 + +**参数:** +- `a` - 最小值 +- `b` - 最大值 + +**返回值:** +- 范围内的随机整数 + +**示例:** + +```oraset +@math; + +show(`randint(1, 100) = `, math.randint(1, 100)); !! 输出: 42 +``` + +## 示例代码 + +```oraset +@math; + +!! 基本运算 +show(`abs(-123) = `, math.abs(-123)); +show(`sqrt(16) = `, math.sqrt(16)); +show(`pow(2, 3) = `, math.pow(2, 3)); +show(`exp(1) = `, math.exp(1)); +show(`log(e) = `, math.log(math.exp(1))); +show(`log10(100) = `, math.log10(100)); + +!! 三角函数 +show(`sin(90) = `, math.sin(90)); +show(`cos(0) = `, math.cos(0)); +show(`tan(45) = `, math.tan(45)); +show(`asin(1) = `, math.asin(1)); +show(`acos(1) = `, math.acos(1)); +show(`atan(1) = `, math.atan(1)); + +!! 数学常数 +show(`π = `, math.pi()); +show(`e = `, math.e()); + +!! 取整函数 +show(`floor(3.9) = `, math.floor(3.9)); +show(`ceil(3.1) = `, math.ceil(3.1)); +show(`round(3.6) = `, math.round(3.6)); + +!! 最值 +show(`max(10, 5, 20) = `, math.max(10, 5, 20)); +show(`min(10, 5, 20) = `, math.min(10, 5, 20)); + +!! 随机数 +show(`random() = `, math.random()); +show(`randint(1, 100) = `, math.randint(1, 100)); +``` + +## 注意事项 + +- 三角函数使用角度作为参数,而非弧度 +- 对于 `sqrt` 和 `log` 等函数,参数必须满足数学要求 +- 随机数生成函数使用系统的随机数生成器 +- 所有函数都返回数字类型的值 \ No newline at end of file diff --git a/docs/docs/libraries/string.md b/docs/docs/libraries/string.md new file mode 100644 index 0000000..17263d8 --- /dev/null +++ b/docs/docs/libraries/string.md @@ -0,0 +1,519 @@ +# 字符串库 + +## 简介 + +字符串库(`@string`)提供了一系列字符串操作函数,包括字符串分割、大小写转换、查找替换等功能。 + +## 导入方式 + +```oraset +@string; +``` + +## 函数参考 + +### 字符串分割与连接 + +#### string.split(s, sep) + +分割字符串。 + +**参数:** +- `s` - 字符串 +- `sep` - 分隔符 + +**返回值:** +- 分割后的数组 + +**示例:** + +```oraset +@string; + +text = `Hello,World,Oraset`; +result = string.split(text, `,`); +show(`Split result: `, result); !! 输出: ["Hello", "World", "Oraset"] +``` + +#### string.join(arr, sep) + +连接数组元素为字符串。 + +**参数:** +- `arr` - 数组 +- `sep` - 分隔符 + +**返回值:** +- 连接后的字符串 + +**示例:** + +```oraset +@string; + +arr = arr(`Hello`, `World`, `Oraset`); +result = string.join(arr, ` `); +show(`Joined result: `, result); !! 输出: Hello World Oraset +``` + +### 大小写转换 + +#### string.upper(s) + +转换为大写。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 大写字符串 + +**示例:** + +```oraset +@string; + +text = `hello world`; +result = string.upper(text); +show(`Upper case: `, result); !! 输出: HELLO WORLD +``` + +#### string.lower(s) + +转换为小写。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 小写字符串 + +**示例:** + +```oraset +@string; + +text = `HELLO WORLD`; +result = string.lower(text); +show(`Lower case: `, result); !! 输出: hello world +``` + +#### string.capitalize(s) + +首字母大写。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 首字母大写的字符串 + +**示例:** + +```oraset +@string; + +text = `hello world`; +result = string.capitalize(text); +show(`Capitalized: `, result); !! 输出: Hello world +``` + +### 字符串长度与提取 + +#### string.length(s) + +获取字符串长度。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 字符串长度 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset!`; +result = string.length(text); +show(`Length: `, result); !! 输出: 13 +``` + +#### string.substring(s, start, end) + +提取子字符串。 + +**参数:** +- `s` - 字符串 +- `start` - 起始索引 +- `end` - 结束索引(可选) + +**返回值:** +- 提取的子字符串 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset!`; +result1 = string.substring(text, 7); +result2 = string.substring(text, 0, 5); +show(`Substring from 7: `, result1); !! 输出: Oraset! +show(`Substring from 0 to 5: `, result2); !! 输出: Hello +``` + +#### string.charAt(s, index) + +获取指定位置的字符。 + +**参数:** +- `s` - 字符串 +- `index` - 索引 + +**返回值:** +- 指定位置的字符 + +**示例:** + +```oraset +@string; + +text = `Hello`; +result = string.charAt(text, 0); +show(`First character: `, result); !! 输出: H +``` + +### 字符串查找 + +#### string.indexOf(s, substr) + +查找子字符串的位置。 + +**参数:** +- `s` - 字符串 +- `substr` - 子字符串 + +**返回值:** +- 子字符串的起始位置,未找到返回 -1 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset!`; +result1 = string.indexOf(text, `Oraset`); +result2 = string.indexOf(text, `World`); +show(`Index of 'Oraset': `, result1); !! 输出: 7 +show(`Index of 'World': `, result2); !! 输出: -1 +``` + +#### string.lastIndexOf(s, substr) + +从末尾开始查找子字符串的位置。 + +**参数:** +- `s` - 字符串 +- `substr` - 子字符串 + +**返回值:** +- 子字符串的起始位置,未找到返回 -1 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset, Oraset!`; +result = string.lastIndexOf(text, `Oraset`); +show(`Last index of 'Oraset': `, result); !! 输出: 14 +``` + +#### string.includes(s, substr) + +检查字符串是否包含子字符串。 + +**参数:** +- `s` - 字符串 +- `substr` - 子字符串 + +**返回值:** +- 布尔值,表示是否包含子字符串 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset!`; +result1 = string.includes(text, `Oraset`); +result2 = string.includes(text, `World`); +show(`Includes 'Oraset': `, result1); !! 输出: true +show(`Includes 'World': `, result2); !! 输出: false +``` + +### 字符串替换 + +#### string.replace(s, old, new) + +替换子字符串。 + +**参数:** +- `s` - 字符串 +- `old` - 要替换的子字符串 +- `new` - 替换后的子字符串 + +**返回值:** +- 替换后的字符串 + +**示例:** + +```oraset +@string; + +text = `Hello, World!`; +result = string.replace(text, `World`, `Oraset`); +show(`Replaced: `, result); !! 输出: Hello, Oraset! +``` + +#### string.replaceAll(s, old, new) + +替换所有匹配的子字符串。 + +**参数:** +- `s` - 字符串 +- `old` - 要替换的子字符串 +- `new` - 替换后的子字符串 + +**返回值:** +- 替换后的字符串 + +**示例:** + +```oraset +@string; + +text = `Hello, World! Hello, World!`; +result = string.replaceAll(text, `World`, `Oraset`); +show(`Replaced all: `, result); !! 输出: Hello, Oraset! Hello, Oraset! +``` + +### 字符串修剪 + +#### string.trim(s) + +移除字符串两端的空白字符。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 修剪后的字符串 + +**示例:** + +```oraset +@string; + +text = ` Hello, Oraset! `; +result = string.trim(text); +show(`Trimmed: `, result); !! 输出: Hello, Oraset! +``` + +#### string.trimStart(s) + +移除字符串开头的空白字符。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 修剪后的字符串 + +**示例:** + +```oraset +@string; + +text = ` Hello, Oraset!`; +result = string.trimStart(text); +show(`Trimmed start: `, result); !! 输出: Hello, Oraset! +``` + +#### string.trimEnd(s) + +移除字符串末尾的空白字符。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 修剪后的字符串 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset! `; +result = string.trimEnd(text); +show(`Trimmed end: `, result); !! 输出: Hello, Oraset! +``` + +### 字符串检查 + +#### string.startsWith(s, prefix) + +检查字符串是否以指定前缀开头。 + +**参数:** +- `s` - 字符串 +- `prefix` - 前缀 + +**返回值:** +- 布尔值,表示是否以指定前缀开头 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset!`; +result1 = string.startsWith(text, `Hello`); +result2 = string.startsWith(text, `World`); +show(`Starts with 'Hello': `, result1); !! 输出: true +show(`Starts with 'World': `, result2); !! 输出: false +``` + +#### string.endsWith(s, suffix) + +检查字符串是否以指定后缀结尾。 + +**参数:** +- `s` - 字符串 +- `suffix` - 后缀 + +**返回值:** +- 布尔值,表示是否以指定后缀结尾 + +**示例:** + +```oraset +@string; + +text = `Hello, Oraset!`; +result1 = string.endsWith(text, `!`); +result2 = string.endsWith(text, `.`); +show(`Ends with '!': `, result1); !! 输出: true +show(`Ends with '.': `, result2); !! 输出: false +``` + +### 字符串重复 + +#### string.repeat(s, count) + +重复字符串指定次数。 + +**参数:** +- `s` - 字符串 +- `count` - 重复次数 + +**返回值:** +- 重复后的字符串 + +**示例:** + +```oraset +@string; + +text = `Hello `; +result = string.repeat(text, 3); +show(`Repeated: `, result); !! 输出: Hello Hello Hello +``` + +### 字符串反转 + +#### string.reverse(s) + +反转字符串。 + +**参数:** +- `s` - 字符串 + +**返回值:** +- 反转后的字符串 + +**示例:** + +```oraset +@string; + +text = `Hello`; +result = string.reverse(text); +show(`Reversed: `, result); !! 输出: olleH +``` + +## 示例代码 + +```oraset +@string; + +!! 字符串分割与连接 +text = `Hello,World,Oraset`; +show(`Original: `, text); +show(`Split: `, string.split(text, `,`)); + +arr = arr(`Hello`, `World`, `Oraset`); +show(`Joined: `, string.join(arr, ` `)); + +!! 大小写转换 +text = `Hello, Oraset!`; +show(`Original: `, text); +show(`Upper: `, string.upper(text)); +show(`Lower: `, string.lower(text)); +show(`Capitalized: `, string.capitalize(text)); + +!! 字符串长度与提取 +text = `Hello, Oraset!`; +show(`Length: `, string.length(text)); +show(`Substring from 7: `, string.substring(text, 7)); +show(`Substring 0-5: `, string.substring(text, 0, 5)); +show(`Character at 0: `, string.charAt(text, 0)); + +!! 字符串查找 +text = `Hello, Oraset!`; +show(`Index of 'Oraset': `, string.indexOf(text, `Oraset`)); +show(`Includes 'Oraset': `, string.includes(text, `Oraset`)); + +!! 字符串替换 +text = `Hello, World!`; +show(`Original: `, text); +show(`Replaced: `, string.replace(text, `World`, `Oraset`)); + +!! 字符串修剪 +text = ` Hello, Oraset! `; +show(`Original: '`, text, `'`); +show(`Trimmed: '`, string.trim(text), `'`); +show(`Trimmed start: '`, string.trimStart(text), `'`); +show(`Trimmed end: '`, string.trimEnd(text), `'`); + +!! 字符串检查 +text = `Hello, Oraset!`; +show(`Starts with 'Hello': `, string.startsWith(text, `Hello`)); +show(`Ends with '!': `, string.endsWith(text, `!`)); + +!! 字符串重复和反转 +text = `Hello`; +show(`Original: `, text); +show(`Repeated: `, string.repeat(text, 3)); +show(`Reversed: `, string.reverse(text)); +``` + +## 注意事项 + +- 字符串索引从 0 开始 +- 所有字符串操作函数都返回新的字符串,不会修改原始字符串 +- 对于 `substring` 函数,如果不指定 `end` 参数,将提取到字符串末尾 +- 对于 `split` 函数,如果分隔符为空字符串,将分割每个字符 \ No newline at end of file diff --git a/docs/docs/libraries/util.md b/docs/docs/libraries/util.md new file mode 100644 index 0000000..e2db98b --- /dev/null +++ b/docs/docs/libraries/util.md @@ -0,0 +1,348 @@ +# 工具库 + +## 简介 + +工具库(`@util`)提供了一系列实用的工具函数,包括随机数生成、数学计算、类型检查等功能。 + +## 导入方式 + +```oraset +@util; +``` + +## 函数参考 + +### 随机数生成 + +#### util.random() + +生成一个0到1之间的随机小数。 + +**参数:** +- 无 + +**返回值:** +- 0到1之间的随机小数 + +**示例:** + +```oraset +@util; + +result = util.random(); +show(`Random number: `, result); !! 输出: 0.123456789 +``` + +#### util.randint(a, b) + +生成一个指定范围内的随机整数。 + +**参数:** +- `a` - 最小值 +- `b` - 最大值 + +**返回值:** +- 范围内的随机整数 + +**示例:** + +```oraset +@util; + +result = util.randint(1, 100); +show(`Random integer: `, result); !! 输出: 42 +``` + +### 数学计算 + +#### util.round(x, n) + +对数字进行四舍五入。 + +**参数:** +- `x` - 要四舍五入的数字 +- `n` - 小数位数(默认为0) + +**返回值:** +- 四舍五入后的数字 + +**示例:** + +```oraset +@util; + +result1 = util.round(3.14159); +result2 = util.round(3.14159, 2); +show(`Rounded: `, result1); !! 输出: 3 +show(`Rounded to 2 decimals: `, result2); !! 输出: 3.14 +``` + +#### util.abs(x) + +计算数字的绝对值。 + +**参数:** +- `x` - 数字 + +**返回值:** +- 数字的绝对值 + +**示例:** + +```oraset +@util; + +result = util.abs(-123); +show(`Absolute value: `, result); !! 输出: 123 +``` + +#### util.min(...args) + +返回多个数字中的最小值。 + +**参数:** +- `...args` - 多个数字 + +**返回值:** +- 最小值 + +**示例:** + +```oraset +@util; + +result = util.min(10, 5, 20, 3); +show(`Minimum: `, result); !! 输出: 3 +``` + +#### util.max(...args) + +返回多个数字中的最大值。 + +**参数:** +- `...args` - 多个数字 + +**返回值:** +- 最大值 + +**示例:** + +```oraset +@util; + +result = util.max(10, 5, 20, 3); +show(`Maximum: `, result); !! 输出: 20 +``` + +#### util.sum(...args) + +计算多个数字的和。 + +**参数:** +- `...args` - 多个数字 + +**返回值:** +- 数字的和 + +**示例:** + +```oraset +@util; + +result = util.sum(1, 2, 3, 4, 5); +show(`Sum: `, result); !! 输出: 15 +``` + +#### util.average(...args) + +计算多个数字的平均值。 + +**参数:** +- `...args` - 多个数字 + +**返回值:** +- 数字的平均值 + +**示例:** + +```oraset +@util; + +result = util.average(1, 2, 3, 4, 5); +show(`Average: `, result); !! 输出: 3 +``` + +### 类型检查 + +#### util.isNumber(x) + +检查值是否为数字。 + +**参数:** +- `x` - 要检查的值 + +**返回值:** +- 布尔值,表示是否为数字 + +**示例:** + +```oraset +@util; + +result1 = util.isNumber(123); +result2 = util.isNumber(`123`); +result3 = util.isNumber(`abc`); +show(`Is 123 a number: `, result1); !! 输出: true +show(`Is '123' a number: `, result2); !! 输出: true +show(`Is 'abc' a number: `, result3); !! 输出: false +``` + +#### util.isString(x) + +检查值是否为字符串。 + +**参数:** +- `x` - 要检查的值 + +**返回值:** +- 布尔值,表示是否为字符串 + +**示例:** + +```oraset +@util; + +result1 = util.isString(`Hello`); +result2 = util.isString(123); +show(`Is 'Hello' a string: `, result1); !! 输出: true +show(`Is 123 a string: `, result2); !! 输出: false +``` + +#### util.isArray(x) + +检查值是否为数组。 + +**参数:** +- `x` - 要检查的值 + +**返回值:** +- 布尔值,表示是否为数组 + +**示例:** + +```oraset +@util; + +result1 = util.isArray(arr(1, 2, 3)); +result2 = util.isArray(`[1, 2, 3]`); +result3 = util.isArray(123); +show(`Is arr(1, 2, 3) an array: `, result1); !! 输出: true +show(`Is '[1, 2, 3]' an array: `, result2); !! 输出: true +show(`Is 123 an array: `, result3); !! 输出: false +``` + +### 类型转换 + +#### util.toNumber(x) + +将值转换为数字。 + +**参数:** +- `x` - 要转换的值 + +**返回值:** +- 转换后的数字 + +**示例:** + +```oraset +@util; + +result = util.toNumber(`123`); +show(`Converted to number: `, result); !! 输出: 123 +``` + +#### util.toString(x) + +将值转换为字符串。 + +**参数:** +- `x` - 要转换的值 + +**返回值:** +- 转换后的字符串 + +**示例:** + +```oraset +@util; + +result = util.toString(123); +show(`Converted to string: `, result); !! 输出: 123 +``` + +#### util.typeof(x) + +获取值的类型。 + +**参数:** +- `x` - 要检查的值 + +**返回值:** +- 值的类型('array'、'number'、'string' 或 'unknown') + +**示例:** + +```oraset +@util; + +result1 = util.typeof(123); +result2 = util.typeof(`Hello`); +result3 = util.typeof(arr(1, 2, 3)); +show(`Type of 123: `, result1); !! 输出: number +show(`Type of 'Hello': `, result2); !! 输出: string +show(`Type of arr(1, 2, 3): `, result3); !! 输出: array +``` + +## 示例代码 + +```oraset +@util; + +!! 随机数生成 +show(`Random number: `, util.random()); +show(`Random integer (1-100): `, util.randint(1, 100)); + +!! 数学计算 +show(`Absolute value of -123: `, util.abs(-123)); +show(`Round 3.14159: `, util.round(3.14159)); +show(`Round 3.14159 to 2 decimals: `, util.round(3.14159, 2)); +show(`Minimum of 10, 5, 20, 3: `, util.min(10, 5, 20, 3)); +show(`Maximum of 10, 5, 20, 3: `, util.max(10, 5, 20, 3)); +show(`Sum of 1, 2, 3, 4, 5: `, util.sum(1, 2, 3, 4, 5)); +show(`Average of 1, 2, 3, 4, 5: `, util.average(1, 2, 3, 4, 5)); + +!! 类型检查 +show(`Is 123 a number: `, util.isNumber(123)); +show(`Is '123' a number: `, util.isNumber(`123`)); +show(`Is 'abc' a number: `, util.isNumber(`abc`)); +show(`Is 'Hello' a string: `, util.isString(`Hello`)); +show(`Is 123 a string: `, util.isString(123)); +show(`Is arr(1, 2, 3) an array: `, util.isArray(arr(1, 2, 3))); + +!! 类型转换 +show(`Convert '123' to number: `, util.toNumber(`123`)); +show(`Convert 123 to string: `, util.toString(123)); + +!! 类型判断 +show(`Type of 123: `, util.typeof(123)); +show(`Type of 'Hello': `, util.typeof(`Hello`)); +show(`Type of arr(1, 2, 3): `, util.typeof(arr(1, 2, 3))); +``` + +## 注意事项 + +- 所有工具函数都不会修改原始值,而是返回新的值 +- 类型检查函数会尝试进行合理的类型判断 +- 对于 `isNumber` 函数,字符串形式的数字也会被认为是数字 +- 对于 `isArray` 函数,字符串形式的数组表示也会被认为是数组 \ No newline at end of file diff --git a/docs/docs/tutorial/basic-syntax.md b/docs/docs/tutorial/basic-syntax.md new file mode 100644 index 0000000..8bc25af --- /dev/null +++ b/docs/docs/tutorial/basic-syntax.md @@ -0,0 +1,331 @@ +# 基本语法 + +本教程将详细介绍 Oraset 编程语言的基本语法,包括变量、数据类型、运算符、表达式等内容。 + +## 注释 + +Oraset 使用两种注释方式: + +- **单行注释**:使用 `!!` 开始 +- **多行注释**:使用 `!*` 开始,`*!` 结束 + +```oraset +!! 这是一个单行注释 + +!* 这是一个 +多行注释 *! +``` + +## 变量 + +### 变量声明与赋值 + +Oraset 使用 `=` 进行变量赋值,不需要显式声明变量类型: + +```oraset +!! 变量赋值 +name = `World`; !! 字符串 +age = 20; !! 整数 +pi = 3.14159; !! 浮点数 +is_valid = true; !! 布尔值 +``` + +### 变量命名规则 + +- 变量名只能包含字母、数字和下划线 +- 变量名不能以数字开头 +- 变量名区分大小写 +- 变量名不能使用关键字(如 `if`、`else`、`while`、`def`、`class` 等) + +### 变量作用域 + +- **全局变量**:在函数外部定义的变量 +- **局部变量**:在函数内部定义的变量 + +```oraset +!! 全局变量 +global_var = `Global`; + +def test() { + !! 局部变量 + local_var = `Local`; + show(global_var); !! 可以访问全局变量 + show(local_var); !! 可以访问局部变量 +} + +test(); +show(global_var); !! 可以访问全局变量 +!! show(local_var); !! 错误:无法访问局部变量 +``` + +## 数据类型 + +### 数字 + +Oraset 支持整数和浮点数: + +```oraset +!! 整数 +integer = 123; +negative = -456; + +!! 浮点数 +float = 3.14; +scientific = 1.23e4; !! 12300 +``` + +### 字符串 + +Oraset 使用反引号 `` ` `` 表示字符串: + +```oraset +!! 字符串 +str1 = `Hello`; +str2 = `World`; + +!! 字符串拼接 +combined = str1 + ` ` + str2; +show(combined); !! 输出: Hello World +``` + +### 数组 + +Oraset 使用 `arr()` 函数创建数组: + +```oraset +!! 数组 +empty = arr(); +numbers = arr(1, 2, 3, 4, 5); +fruits = arr(`apple`, `banana`, `cherry`); +mixed = arr(1, `hello`, 3.14); + +!! 访问数组元素 +show(numbers[0]); !! 输出: 1 +show(fruits[1]); !! 输出: banana +``` + +### 布尔值 + +Oraset 支持布尔值 `true` 和 `false`: + +```oraset +!! 布尔值 +true_value = true; +false_value = false; + +!! 布尔表达式 +is_greater = 5 > 3; !! true +is_equal = 5 == 3; !! false +``` + +## 运算符 + +### 算术运算符 + +| 运算符 | 描述 | 示例 | +|-------|------|------| +| `+` | 加法 | `a + b` | +| `-` | 减法 | `a - b` | +| `*` | 乘法 | `a * b` | +| `/` | 除法 | `a / b` | +| `%` | 取模 | `a % b` | +| `**` | 幂运算 | `a ** b` | + +```oraset +!! 算术运算符 +a = 10; +b = 3; + +show(`a + b = `, a + b); !! 13 +show(`a - b = `, a - b); !! 7 +show(`a * b = `, a * b); !! 30 +show(`a / b = `, a / b); !! 3.3333333333333335 +show(`a % b = `, a % b); !! 1 +show(`a ** b = `, a ** b); !! 1000 +``` + +### 比较运算符 + +| 运算符 | 描述 | 示例 | +|-------|------|------| +| `==` | 等于 | `a == b` | +| `!=` | 不等于 | `a != b` | +| `<` | 小于 | `a < b` | +| `>` | 大于 | `a > b` | +| `<=` | 小于等于 | `a <= b` | +| `>=` | 大于等于 | `a >= b` | + +```oraset +!! 比较运算符 +a = 5; +b = 10; + +show(`a == b: `, a == b); !! false +show(`a != b: `, a != b); !! true +show(`a < b: `, a < b); !! true +show(`a > b: `, a > b); !! false +show(`a <= b: `, a <= b); !! true +show(`a >= b: `, a >= b); !! false +``` + +### 逻辑运算符 + +| 运算符 | 描述 | 示例 | +|-------|------|------| +| `&&` | 逻辑与 | `a && b` | +| `||` | 逻辑或 | `a || b` | +| `!` | 逻辑非 | `!a` | + +```oraset +!! 逻辑运算符 +t = true; +f = false; + +show(`t && f: `, t && f); !! false +show(`t || f: `, t || f); !! true +show(`!t: `, !t); !! false +show(`!f: `, !f); !! true +``` + +### 赋值运算符 + +| 运算符 | 描述 | 示例 | +|-------|------|------| +| `=` | 简单赋值 | `a = b` | +| `+=` | 加赋值 | `a += b` | +| `-=` | 减赋值 | `a -= b` | +| `*=` | 乘赋值 | `a *= b` | +| `/=` | 除赋值 | `a /= b` | +| `%=` | 取模赋值 | `a %= b` | + +```oraset +!! 赋值运算符 +a = 10; +show(`Initial a: `, a); !! 10 + +a += 5; +show(`a += 5: `, a); !! 15 + +a -= 3; +show(`a -= 3: `, a); !! 12 + +a *= 2; +show(`a *= 2: `, a); !! 24 + +a /= 4; +show(`a /= 4: `, a); !! 6 + +a %= 5; +show(`a %= 5: `, a); !! 1 +``` + +## 表达式 + +表达式是由变量、常量、运算符和函数调用组成的组合,用于计算值: + +```oraset +!! 表达式 +result = (10 + 5) * 2 / 3; +show(`Result: `, result); !! 10.0 + +!! 复杂表达式 +a = 10; +b = 5; +c = 3; +result = (a + b) * c - (a / b); +show(`Result: `, result); !! 45.0 +``` + +## 输入输出 + +### 输出 + +使用 `show` 函数输出内容: + +```oraset +!! 输出 +show(`Hello, World!`); +show(`The answer is: `, 42); +show(`Pi is approximately: `, 3.14159); +``` + +### 输入 + +使用 `input` 函数获取用户输入: + +```oraset +!! 输入 +name = input(`What's your name? `); +age = input(`How old are you? `); +show(`Hello, `, name, `! You are `, age, ` years old.`); +``` + +## 转义字符 + +Oraset 支持以下转义字符: + +| 转义字符 | 描述 | +|---------|------| +| `\n` | 换行 | +| `\t` | 制表符 | +| `\r` | 回车 | +| `\` | 反斜杠 | +| `` \` `` | 反引号 | + +```oraset +!! 转义字符 +show(`Line 1\nLine 2`); +show(`Name:\tJohn`); +show(`Path: C:\\folder\\file.txt`); +show(`He said: \`Hello!\``); +``` + +## 示例代码 + +```oraset +!! 基本语法示例 + +!! 变量赋值 +name = `Oraset`; +age = 20; +pi = 3.14159; + +!! 算术运算 +radius = 5; +area = pi * radius ** 2; +show(`Area of circle: `, area); + +!! 字符串操作 +greeting = `Hello, ` + name + `!`; +show(greeting); + +!! 数组操作 +numbers = arr(1, 2, 3, 4, 5); +sum = 0; +i = 0; + +while (i < 5) { + sum = sum + numbers[i]; + i = i + 1; +} + +show(`Sum of numbers: `, sum); + +!! 输入输出 +user_name = input(`What's your name? `); +show(`Nice to meet you, `, user_name, `!`); +``` + +## 小结 + +本教程介绍了 Oraset 编程语言的基本语法,包括: + +- 注释的使用 +- 变量的声明和赋值 +- 数据类型(数字、字符串、数组、布尔值) +- 各种运算符(算术、比较、逻辑、赋值) +- 表达式的使用 +- 输入输出操作 +- 转义字符 + +这些是 Oraset 编程的基础,掌握这些内容后,你可以开始编写更复杂的程序。 \ No newline at end of file diff --git a/docs/docs/tutorial/control-structures.md b/docs/docs/tutorial/control-structures.md new file mode 100644 index 0000000..a17dd8c --- /dev/null +++ b/docs/docs/tutorial/control-structures.md @@ -0,0 +1,254 @@ +# 控制结构 + +本教程将详细介绍 Oraset 编程语言的控制结构,包括条件语句和循环语句,帮助你掌握程序的流程控制。 + +## 条件语句 + +### if 语句 + +`if` 语句用于根据条件执行不同的代码块: + +```oraset +!! if 语句 +age = 18; + +if (age >= 18) { + show(`You are an adult.`); +} +``` + +### if-else 语句 + +`if-else` 语句用于在条件为真和为假时执行不同的代码块: + +```oraset +!! if-else 语句 +age = 16; + +if (age >= 18) { + show(`You are an adult.`); +} else { + show(`You are a minor.`); +} +``` + +### if-else if-else 语句 + +`if-else if-else` 语句用于处理多个条件: + +```oraset +!! if-else if-else 语句 +score = 85; + +if (score >= 90) { + show(`Grade: A`); +} else if (score >= 80) { + show(`Grade: B`); +} else if (score >= 70) { + show(`Grade: C`); +} else if (score >= 60) { + show(`Grade: D`); +} else { + show(`Grade: F`); +} +``` + +### 嵌套条件语句 + +条件语句可以嵌套使用: + +```oraset +!! 嵌套条件语句 +age = 20; +has_license = true; + +if (age >= 18) { + if (has_license) { + show(`You can drive.`); + } else { + show(`You need a driver's license to drive.`); + } +} else { + show(`You are too young to drive.`); +} +``` + +## 循环语句 + +### while 循环 + +`while` 循环用于重复执行代码块,直到条件为假: + +```oraset +!! while 循环 +count = 0; + +while (count < 5) { + show(`Count: `, count); + count = count + 1; +} +``` + +### 无限循环 + +你可以创建无限循环,但需要注意在适当的时候使用 `break` 语句退出循环: + +```oraset +!! 无限循环 +i = 0; + +while (true) { + show(`Iteration: `, i); + i = i + 1; + + if (i >= 5) { + break; !! 退出循环 + } +} +``` + +### 循环控制 + +#### break 语句 + +`break` 语句用于立即退出循环: + +```oraset +!! break 语句 +count = 0; + +while (count < 10) { + show(`Count: `, count); + + if (count == 5) { + show(`Breaking the loop.`); + break; + } + + count = count + 1; +} +``` + +#### continue 语句 + +`continue` 语句用于跳过当前循环的剩余部分,直接进入下一次循环: + +```oraset +!! continue 语句 +count = 0; + +while (count < 5) { + count = count + 1; + + if (count == 3) { + show(`Skipping count: `, count); + continue; + } + + show(`Count: `, count); +} +``` + +## 综合示例 + +### 猜数字游戏 + +```oraset +!! 猜数字游戏 +@math; + +secret_number = math.randint(1, 100); +guess = 0; +tries = 0; + +show(`I'm thinking of a number between 1 and 100.`); +show(`Can you guess what it is?`); + +while (guess != secret_number) { + guess = input(`Enter your guess: `); + guess = util.toNumber(guess); + tries = tries + 1; + + if (guess < secret_number) { + show(`Too low!`); + } else if (guess > secret_number) { + show(`Too high!`); + } else { + show(`Congratulations! You guessed the number in `, tries, ` tries.`); + } +} +``` + +### 计算斐波那契数列 + +```oraset +!! 计算斐波那契数列 +n = 10; +a = 0; +b = 1; +i = 0; + +show(`Fibonacci sequence up to `, n, ` terms:`); + +while (i < n) { + show(a); + next = a + b; + a = b; + b = next; + i = i + 1; +} +``` + +### 素数判断 + +```oraset +!! 素数判断 +number = input(`Enter a number: `); +number = util.toNumber(number); +is_prime = true; + +if (number <= 1) { + is_prime = false; +} else { + i = 2; + while (i * i <= number) { + if (number % i == 0) { + is_prime = false; + break; + } + i = i + 1; + } +} + +if (is_prime) { + show(number, ` is a prime number.`); +} else { + show(number, ` is not a prime number.`); +} +``` + +## 注意事项 + +1. **括号使用**:条件语句和循环语句的条件必须用括号 `()` 包围 +2. **代码块**:代码块必须用大括号 `{}` 包围 +3. **缩进**:虽然缩进不是强制的,但良好的缩进可以提高代码可读性 +4. **分号**:语句结束时使用分号 `;` +5. **条件表达式**:条件表达式必须返回布尔值 + +## 练习 + +1. 编写一个程序,输入一个年份,判断是否为闰年 +2. 编写一个程序,计算 1 到 100 的和 +3. 编写一个程序,打印乘法表(1-9) +4. 编写一个程序,输入一个字符串,判断是否为回文 + +## 小结 + +本教程介绍了 Oraset 编程语言的控制结构,包括: + +- 条件语句:`if`、`else if`、`else` +- 循环语句:`while` +- 循环控制:`break`、`continue` +- 综合示例:猜数字游戏、斐波那契数列、素数判断 + +这些控制结构是编写复杂程序的基础,掌握它们后,你可以编写更灵活、更强大的 Oraset 程序。 \ No newline at end of file diff --git a/docs/docs/tutorial/functions-and-classes.md b/docs/docs/tutorial/functions-and-classes.md new file mode 100644 index 0000000..0d9a100 --- /dev/null +++ b/docs/docs/tutorial/functions-and-classes.md @@ -0,0 +1,411 @@ +# 函数和类 + +本教程将详细介绍 Oraset 编程语言的函数和类,帮助你掌握模块化编程和面向对象编程的基本概念。 + +## 函数 + +### 函数定义 + +使用 `def` 关键字定义函数: + +```oraset +!! 函数定义 +def greet(name) { + show(`Hello, `, name, `!`); +} +``` + +### 函数调用 + +通过函数名和参数列表调用函数: + +```oraset +!! 函数调用 +greet(`Oraset`); !! 输出: Hello, Oraset! +``` + +### 参数 + +函数可以接受多个参数: + +```oraset +!! 多参数函数 +def add(a, b) { + return a + b; +} + +result = add(10, 5); +show(`10 + 5 = `, result); !! 输出: 15 +``` + +### 返回值 + +使用 `return` 语句返回函数结果: + +```oraset +!! 带返回值的函数 +def multiply(a, b) { + return a * b; +} + +result = multiply(10, 5); +show(`10 * 5 = `, result); !! 输出: 50 +``` + +### 无参数函数 + +函数可以不接受任何参数: + +```oraset +!! 无参数函数 +def say_hello() { + show(`Hello, World!`); +} + +say_hello(); !! 输出: Hello, World! +``` + +### 默认参数 + +函数可以有默认参数值: + +```oraset +!! 默认参数 +def greet(name = `World`) { + show(`Hello, `, name, `!`); +} + +greet(); !! 输出: Hello, World! +greet(`Oraset`); !! 输出: Hello, Oraset! +``` + +### 可变参数 + +函数可以接受可变数量的参数: + +```oraset +!! 可变参数 +def sum(...args) { + total = 0; + i = 0; + while (i < args.length) { + total = total + args[i]; + i = i + 1; + } + return total; +} + +result = sum(1, 2, 3, 4, 5); +show(`Sum: `, result); !! 输出: 15 +``` + +### 递归函数 + +函数可以递归调用自身: + +```oraset +!! 递归函数 +def factorial(n) { + if (n <= 1) { + return 1; + } + return n * factorial(n - 1); +} + +result = factorial(5); +show(`5! = `, result); !! 输出: 120 +``` + +### 匿名函数 + +Oraset 支持匿名函数(也称为 lambda 函数): + +```oraset +!! 匿名函数 +double = lambda x: x * 2; +show(`Double of 5: `, double(5)); !! 输出: 10 + +add = lambda a, b: a + b; +show(`10 + 5 = `, add(10, 5)); !! 输出: 15 +``` + +## 类 + +### 类定义 + +使用 `class` 关键字定义类: + +```oraset +!! 类定义 +class Person { + name = `Unknown`; + age = 0; + + def __init__(self, name, age) { + self.name = name; + self.age = age; + } + + def greet(self) { + show(`Hello, my name is `, self.name, ` and I am `, self.age, ` years old.`); + } + + def celebrate_birthday(self) { + self.age = self.age + 1; + show(`Happy birthday! I am now `, self.age, ` years old.`); + } +} +``` + +### 类的实例化 + +创建类的实例: + +```oraset +!! 类的实例化 +person = Person(`John`, 30); +person.greet(); !! 输出: Hello, my name is John and I am 30 years old. +``` + +### 类的方法 + +调用类的方法: + +```oraset +!! 调用类的方法 +person = Person(`John`, 30); +person.greet(); +person.celebrate_birthday(); !! 输出: Happy birthday! I am now 31 years old. +person.greet(); !! 输出: Hello, my name is John and I am 31 years old. +``` + +### 类的属性 + +访问和修改类的属性: + +```oraset +!! 访问和修改类的属性 +person = Person(`John`, 30); +show(`Name: `, person.name); !! 输出: John +show(`Age: `, person.age); !! 输出: 30 + +person.name = `Jane`; +person.age = 25; +show(`Name: `, person.name); !! 输出: Jane +show(`Age: `, person.age); !! 输出: 25 +``` + +### 继承 + +类可以继承其他类的属性和方法: + +```oraset +!! 继承 +class Student(Person) { + student_id = ``; + + def __init__(self, name, age, student_id) { + super().__init__(name, age); + self.student_id = student_id; + } + + def study(self) { + show(`I am studying. My student ID is `, self.student_id); + } +} + +student = Student(`Alice`, 18, `S12345`); +student.greet(); !! 输出: Hello, my name is Alice and I am 18 years old. +student.study(); !! 输出: I am studying. My student ID is S12345 +``` + +### 静态方法 + +类可以有静态方法,不需要实例化就可以调用: + +```oraset +!! 静态方法 +class MathUtils { + @staticmethod + def add(a, b) { + return a + b; + } + + @staticmethod + def multiply(a, b) { + return a * b; + } +} + +result1 = MathUtils.add(10, 5); +result2 = MathUtils.multiply(10, 5); +show(`10 + 5 = `, result1); !! 输出: 15 +show(`10 * 5 = `, result2); !! 输出: 50 +``` + +## 综合示例 + +### 计算器类 + +```oraset +!! 计算器类 +class Calculator { + def add(self, a, b) { + return a + b; + } + + def subtract(self, a, b) { + return a - b; + } + + def multiply(self, a, b) { + return a * b; + } + + def divide(self, a, b) { + if (b == 0) { + show(`Error: Division by zero`); + return null; + } + return a / b; + } + + def power(self, a, b) { + result = 1; + i = 0; + while (i < b) { + result = result * a; + i = i + 1; + } + return result; + } +} + +!! 使用计算器 +calc = Calculator(); +show(`2 + 3 = `, calc.add(2, 3)); +show(`5 - 2 = `, calc.subtract(5, 2)); +show(`4 * 6 = `, calc.multiply(4, 6)); +show(`10 / 2 = `, calc.divide(10, 2)); +show(`2 ^ 3 = `, calc.power(2, 3)); +``` + +### 图书管理系统 + +```oraset +!! 图书管理系统 +class Book { + title = ``; + author = ``; + isbn = ``; + available = true; + + def __init__(self, title, author, isbn) { + self.title = title; + self.author = author; + self.isbn = isbn; + } + + def borrow(self) { + if (self.available) { + self.available = false; + return true; + } + return false; + } + + def return_book(self) { + self.available = true; + } + + def get_info(self) { + status = self.available ? `Available` : `Borrowed`; + return `Title: ` + self.title + `, Author: ` + self.author + `, ISBN: ` + self.isbn + `, Status: ` + status; + } +} + +class Library { + books = arr(); + + def add_book(self, book) { + self.books = array.push(self.books, book); + } + + def find_book_by_title(self, title) { + i = 0; + while (i < array.length(self.books)) { + book = self.books[i]; + if (book.title == title) { + return book; + } + i = i + 1; + } + return null; + } + + def list_books(self) { + i = 0; + while (i < array.length(self.books)) { + book = self.books[i]; + show(book.get_info()); + i = i + 1; + } + } +} + +!! 使用图书管理系统 +library = Library(); + +!! 添加图书 +library.add_book(Book(`The Great Gatsby`, `F. Scott Fitzgerald`, `978-0743273565`)); +library.add_book(Book(`To Kill a Mockingbird`, `Harper Lee`, `978-0061120084`)); +library.add_book(Book(`1984`, `George Orwell`, `978-0451524935`)); + +!! 列出所有图书 +show(`All books:`); +library.list_books(); + +!! 借阅图书 +book = library.find_book_by_title(`1984`); +if (book) { + if (book.borrow()) { + show(`Successfully borrowed: `, book.title); + } else { + show(`Book not available: `, book.title); + } +} + +!! 再次列出图书 +show(`\nBooks after borrowing:`); +library.list_books(); +``` + +## 注意事项 + +1. **函数命名**:函数名应该使用小写字母,多个单词之间使用下划线 +2. **类命名**:类名应该使用驼峰命名法(首字母大写) +3. **方法命名**:方法名应该使用小写字母,多个单词之间使用下划线 +4. **参数传递**:参数按值传递,对于数组等复杂类型,传递的是引用 +5. **self 参数**:类的方法第一个参数必须是 `self`,表示实例本身 +6. **super()**:在继承中,使用 `super()` 调用父类的方法 + +## 练习 + +1. 编写一个函数,计算两个数的最大公约数 +2. 编写一个函数,判断一个字符串是否为回文 +3. 编写一个类,表示一个银行账户,包含存款、取款和查询余额的方法 +4. 编写一个类,表示一个矩形,包含计算面积和周长的方法 + +## 小结 + +本教程介绍了 Oraset 编程语言的函数和类,包括: + +- 函数定义和调用 +- 函数参数和返回值 +- 递归函数和匿名函数 +- 类的定义和实例化 +- 类的方法和属性 +- 继承和静态方法 +- 综合示例:计算器类和图书管理系统 + +掌握这些概念后,你可以编写更模块化、更可维护的 Oraset 程序。 \ No newline at end of file diff --git a/docs/docs/tutorial/quickstart.md b/docs/docs/tutorial/quickstart.md new file mode 100644 index 0000000..b4a08d8 --- /dev/null +++ b/docs/docs/tutorial/quickstart.md @@ -0,0 +1,196 @@ +# 快速开始 + +本教程将帮助你快速上手 Oraset 编程语言,包括安装、编写第一个程序以及基本的使用方法。 + +## 安装 Oraset + +### 从源码安装 + +1. **克隆或下载源码** + - 访问 [GitHub 仓库](https://github.com/Oraset/oraset) 克隆或下载源码到本地 + - 解压到任意目录 + +2. **系统要求** + - Python 3.6 或更高版本 + - 支持 Windows 和 Linux 操作系统 + +3. **运行 Oraset** + - 进入 Oraset 目录 + - 直接运行 `oraset.py` 文件: + ```bash + python oraset.py + ``` + +### 从二进制安装 + +1. **下载二进制文件** + - 访问 [Oraset 官网](https://oraset.org) 下载对应平台的二进制文件 + - Windows 为 `.exe` 文件,Linux 为可执行文件 + +2. **安装** + - 解压到任意目录 + - 将可执行文件所在目录添加到系统环境变量(可选) + +3. **运行 Oraset** + - 直接运行可执行文件: + ```bash + oraset + ``` + +## 运行你的第一个程序 + +### 创建程序文件 + +创建一个名为 `hello.oraset` 的文件,内容如下: + +```oraset +!! 这是一个注释 +show(`Hello, Oraset!`); +``` + +### 运行程序 + +**使用源码运行**: + +```bash +python oraset.py hello.oraset +``` + +**使用二进制文件运行**: + +```bash +oraset hello.oraset +``` + +### 查看输出 + +你将看到输出: + +``` +Hello, Oraset! +``` + +## 基本语法示例 + +### 变量赋值 + +```oraset +!! 变量赋值 +name = `World`; +age = 20; +pi = 3.14159; + +show(`Name: `, name); +show(`Age: `, age); +show(`PI: `, pi); +``` + +### 数学表达式 + +```oraset +!! 数学表达式 +a = 10; +b = 5; + +show(`a + b = `, a + b); +show(`a - b = `, a - b); +show(`a * b = `, a * b); +show(`a / b = `, a / b); +show(`a % b = `, a % b); +``` + +### 条件语句 + +```oraset +!! 条件语句 +age = 18; + +if (age >= 18) { + show(`Adult`); +} else { + show(`Minor`); +} +``` + +### 循环语句 + +```oraset +!! 循环语句 +count = 0; + +while (count < 5) { + show(`Count: `, count); + count = count + 1; +} +``` + +### 函数定义 + +```oraset +!! 函数定义 +def greet(name) { + show(`Hello, `, name, `!`); +} + +greet(`Oraset`); +``` + +### 数组操作 + +```oraset +!! 数组操作 +fruits = arr(`apple`, `banana`, `cherry`); +show(`Fruits: `, fruits); +show(`First fruit: `, fruits[0]); +``` + +## 库的使用 + +### 导入库 + +```oraset +!! 导入数学库 +@math; + +!! 使用数学函数 +show(`PI: `, math.pi()); +show(`sin(90): `, math.sin(90)); +``` + +## 打包程序 + +你可以将 Oraset 代码打包为加密的 `.osp` 文件: + +```bash +python oraset.py pack hello.oraset +``` + +这将生成 `hello.osp` 文件,你可以直接运行它: + +```bash +python oraset.py -osp hello.osp +``` + +## 常见问题 + +### 为什么我的程序没有输出? +- 确保你使用了 `show` 函数来输出内容 +- 检查是否有语法错误 + +### 如何处理输入? +- Oraset 支持 `input` 函数来获取用户输入: + ```oraset + name = input(`What's your name? `); + show(`Hello, `, name, `!`); + ``` + +### 如何调试程序? +- 使用 `show` 函数打印变量值 +- 检查错误信息,Oraset 会显示详细的错误位置和原因 + +## 下一步 + +- [基本语法教程](basic-syntax.md) - 学习 Oraset 的基本语法 +- [控制结构教程](control-structures.md) - 学习条件语句和循环 +- [函数和类教程](functions-and-classes.md) - 学习函数和类的使用 +- [库参考](libraries/math.md) - 了解 Oraset 的内置库 \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml new file mode 100644 index 0000000..30618d7 --- /dev/null +++ b/docs/mkdocs.yml @@ -0,0 +1,65 @@ +# 站点配置 +site_name: Oraset 编程语言 +site_url: https://oraset.org +site_description: Oraset 编程语言官方文档 - 简单、强大、跨平台的编程语言 + +# 主题配置 +theme: + name: material + language: zh + palette: + primary: orange + accent: orange + scheme: default + features: + - navigation.tabs + - navigation.sections + - search.suggest + - search.highlight + - content.code.copy + - content.code.select + icon: + repo: fontawesome/brands/github + logo: https://trae-api-cn.mchost.guru/api/ide/v1/text_to_image?prompt=Oraset%20programming%20language%20logo%2C%20orange%20color%2C%20modern%20design&image_size=square_hd + +# 插件 +plugins: + - search + +# 导航 +nav: + - 首页: index.md + - 入门教程: + - 快速开始: tutorial/quickstart.md + - 基本语法: tutorial/basic-syntax.md + - 控制结构: tutorial/control-structures.md + - 函数和类: tutorial/functions-and-classes.md + - 库参考: + - 数学库: libraries/math.md + - 字符串库: libraries/string.md + - 数组库: libraries/array.md + - 工具库: libraries/util.md + +# 额外设置 +markdown_extensions: + - toc: + permalink: true + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - admonition + - pymdownx.details + +# 仓库配置 +repo_url: https://github.com/Oraset/oraset +repo_name: Oraset/oraset + +# 社交链接 +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/Oraset/oraset + - icon: fontawesome/solid/comments + link: https://bbs.ecuil.com \ No newline at end of file diff --git a/docs/site/404.html b/docs/site/404.html new file mode 100644 index 0000000..cd2262a --- /dev/null +++ b/docs/site/404.html @@ -0,0 +1,755 @@ + + + +
+ + + + + + + + + + + + + + + + + + + +0&&i[i.length-1])&&(p[0]===6||p[0]===2)){r=0;continue}if(p[0]===3&&(!i||p[1]>i[0]&&p[1]=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function K(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var o=r.call(e),n,i=[],s;try{for(;(t===void 0||t-- >0)&&!(n=o.next()).done;)i.push(n.value)}catch(a){s={error:a}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(s)throw s.error}}return i}function B(e,t,r){if(r||arguments.length===2)for(var o=0,n=t.length,i;o