Files
aster/README.md
2026-02-10 17:30:44 +08:00

106 lines
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Aster
用 Rust 实现的脚本语言解释器。
## 项目结构
```
aster/
├── src/
│ ├── lexer/ # 词法分析器
│ ├── ast/ # 抽象语法树
│ ├── parser/ # 语法分析器
│ ├── interpreter/# 解释器
│ ├── error/ # 错误处理
│ └── main.rs
├── script.ast # 示例脚本
└── Cargo.toml
```
## 运行方式
```bash
# 运行脚本文件
cargo run -- script.ast
# 从标准输入读取
cargo run
```
## 语言特性
### 数据类型
- 数字(`Number`
- 字符串(`String`
- 布尔值(`true` / `false`
- 空值(`nil`
- 对象(`Object`)——以字典形式保存键值对
### 变量与赋值
```rust
let x = 42;
let name = "aster";
```
### 控制流
- **条件分支**`if` / `else`
- **循环**`while`
### 函数
```rust
fn fib(n) {
if (n <= 1) {
return n
}
return fib(n - 1) + fib(n - 2)
}
print(fib(10))
```
### 运算符
- 算术:`+` `-` `*` `/`
- 比较:`<` `<=` `>` `>=` `==` `!=`
- 逻辑:`&&` `||`
- 一元:`!` `-`
### 对象与属性
使用花括号即可声明对象字面量,并通过 `.` 访问或更新属性:
```rust
let user = { name: "aster", version: 1 };
print(user.name);
user.version = user.version + 1;
print(user.version);
```
对象可以嵌套,也可以与命名空间组合使用(例如 `io.print``os.clock`)。
### 内置函数与命名空间
- `io.print(value)` / `print(value)`:打印值(为了兼容,`print` 仍暴露在全局命名空间)
- `io.input()` / `input()`:读取一行输入
- `os.clock()`:返回当前时间戳(秒)
## 构建
```bash
cargo build --release
```
构建产物位于 `target/release/aster`,可直接执行:
```bash
./target/release/aster script.ast
```
## 依赖
无外部依赖,仅使用 Rust 标准库。