一门用 Python 写的小型动态脚本语言,作为学习项目。
fn make_dog(name) {
return {
"name": name,
"bark": fn() { return self.name + " says woof!" }
}
}
let dogs = [make_dog("Rex"), make_dog("Buddy")]
for d in dogs {
print d.bark()
}
需要 Python 3.10+。
# 运行一个文件
python main.py examples/hello.miy
# 进入 REPL
python main.py- 数字、字符串、布尔值、数组、字典
- 控制流:
if/else/while/for/break/continue - 一等函数 + 闭包 + lambda(
fn(x) { return x * 2 }) - 对象 + 方法 +
self(链式调用) - 错误处理:
try/catch/throw,带调用栈 - 模块系统:
import "x.miy",也能作为表达式返回模块对象 - 文件 I/O、字符串工具、用 MiY 自己写的标准库
lexer.py 词法分析:源码 → token 流
parser.py 语法分析:token → AST
interpreter.py 树遍历解释器
main.py 入口 + REPL
stdlib.miy 用 MiY 自己写的标准库
examples/ 示例程序
更多见 examples/。
import "stdlib.miy"
let nums = [1, 2, 3, 4, 5]
print stdlib.map(nums, fn(x) { return x * x })
# => [1, 4, 9, 16, 25]
这是个学习项目,API 和语法都可能改。目前是树遍历解释器,性能没做优化。
MIT