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.print、os.clock)。
内置函数与命名空间
io.print(value)/print(value):打印值(为了兼容,print仍暴露在全局命名空间)io.input()/input():读取一行输入os.clock():返回当前时间戳(秒)
构建
cargo build --release
构建产物位于 target/release/aster,可直接执行:
./target/release/aster script.ast
依赖
无外部依赖,仅使用 Rust 标准库。
Description
Languages
Rust
100%