Skip to content

mingyue626/miy

Repository files navigation

MiY

一门用 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 和语法都可能改。目前是树遍历解释器,性能没做优化。

License

MIT

About

A small toy programming language, written in Python

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors