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

1.8 KiB
Raw Permalink Blame History

Aster

用 Rust 实现的脚本语言解释器。

项目结构

aster/
├── src/
│   ├── lexer/      # 词法分析器
│   ├── ast/        # 抽象语法树
│   ├── parser/     # 语法分析器
│   ├── interpreter/# 解释器
│   ├── error/      # 错误处理
│   └── main.rs
├── script.ast      # 示例脚本
└── Cargo.toml

运行方式

# 运行脚本文件
cargo run -- script.ast

# 从标准输入读取
cargo run

语言特性

数据类型

  • 数字(Number
  • 字符串(String
  • 布尔值(true / false
  • 空值(nil
  • 对象(Object)——以字典形式保存键值对

变量与赋值

let x = 42;
let name = "aster";

控制流

  • 条件分支if / else
  • 循环while

函数

fn fib(n) {
    if (n <= 1) {
        return n
    }
    return fib(n - 1) + fib(n - 2)
}

print(fib(10))

运算符

  • 算术:+ - * /
  • 比较:< <= > >= == !=
  • 逻辑:&& ||
  • 一元:! -

对象与属性

使用花括号即可声明对象字面量,并通过 . 访问或更新属性:

let user = { name: "aster", version: 1 };
print(user.name);
user.version = user.version + 1;
print(user.version);

对象可以嵌套,也可以与命名空间组合使用(例如 io.printos.clock)。

内置函数与命名空间

  • io.print(value) / print(value):打印值(为了兼容,print 仍暴露在全局命名空间)
  • io.input() / input():读取一行输入
  • os.clock():返回当前时间戳(秒)

构建

cargo build --release

构建产物位于 target/release/aster,可直接执行:

./target/release/aster script.ast

依赖

无外部依赖,仅使用 Rust 标准库。