__ __ __ __ __ __ ______ __ __ /\ "-./ \ /\ \ /\ "-.\ \ /\ \ /\ == \ /\ \_\ \ \ \ \-./\ \ \ \ \ \ \ \-. \ \ \ \ \ \ _-/ \ \____ \ \ \_\ \ \_\ \ \_\ \ \_\\"\_\ \ \_\ \ \_\ \/\_____\ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_____/
迷你Python解释器,Python实现的编译器+C语言实现的VM.
cd minipy
make && make test
# and enjoy yourself ^_^
位于 /src/python
tmcode.py
字节码定义lex.py
词法分析器parse.py
手写递归解析器encode.py
代码生成器,运行python encode.py {script.py}
可以打印出字节码(未处理过的)
- 基于栈的计算机模型,字节码定义在
src/python/tmcode.py
- 支持异常处理,基于
setjmp/longjmp
实现 - 支持Native方法扩展
- 支持常用的Python类型
- 支持函数定义、简单类定义
- Mark-Sweep垃圾回收
- 字符串常量池
- 尾调用优化
- [] DEBUG功能
- [] 用户级线程
- [] 类的继承
- minipy -dis {test.py} 打印字节码(常量处理过)
vm.c
虚拟机入口interp.c
解释器builtins.c
一些常用的内置方法ops.c
操作符实现tmarg.c
函数调用参数APIexception.c
异常处理gc.c
垃圾回收器string.c
number.c
list.c
dict.c
function.c
- string, 是不可变对象
- number, 全部使用double类型
- list, 列表
- dict, dict对象目前不是使用hashtable实现的,
- function, 包括native的C函数和自定义的Python函数
- None
- data, data类型可以使用C语言自由扩展
- MIT