1个不稳定版本
0.1.0 | 2021年8月2日 |
---|
#666 在 编程语言
69KB
2K SLoC
yes-lang
另一种脚本语言
Rust的简单解释器
- "手动"令牌化
- 单行/多行注释
- 前缀 & 中缀运算符
- Pratt解析器实现
- 树遍历解释器
- 不可变作用域绑定
- 函数作为一等公民
- 词法分析器、解析器、解释器和REPL在 <2k LoC
目标
- 通过实践学习
- 易于理解
- 易于实现
- 易于遵循
- 测试覆盖率
非目标
- IO
- stdlib
- 安全性
- 集合
- 性能
- 类型安全性
- 生产就绪性
- 通用可用性
REPL
$ cargo run
[...]
REPL: enter :q to quit.
> let hi = fn(name) { "hello " + name };
[AST]
<function>
> hi("world")
[AST]
hello world
> :q
$
运行
// examples/fib.yes
fn fib1(n, a, b) {
if n == 0 { a+b }
else { fib1(n-1, a+b, a) }
}
fn fib(n) {
if n <= 0 { 0 }
else {
if n <= 2 { 1 }
else {
fib1(n-2, 1, 0)
}
}
}
fib(42) == 267914296 && fib(84) == 160500643816367088
$ cargo run examples/fib.yes
[...]
true