__ __ __ __ __ __ ______ __ __ /\ "-./ \ /\ \ /\ "-.\ \ /\ \ /\ == \ /\ \_\ \ \ \ \-./\ \ \ \ \ \ \ \-. \ \ \ \ \ \ _-/ \ \____ \ \ \_\ \ \_\ \ \_\ \ \_\\"\_\ \ \_\ \ \_\ \/\_____\ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_/ \/_____/
迷你Python解释器,Python实现的编译器+C语言实现的VM.
cd minipy
make && make test
# and enjoy yourself ^_^
位于 /src/python
mp_opcode.py
字节码定义mp_tokenize.py
词法分析器mp_parse.py
手写递归解析器mp_encode.py
代码生成器,运行python mp_encode.py {script.py}
可以打印出字节码(未处理过的)
- 基于栈的计算机模型,字节码定义在
src/python/tmcode.py
- 支持异常处理,基于
setjmp/longjmp
实现 - 支持Native方法扩展
- 支持常用的Python类型
- 支持函数定义、简单类定义
- Mark-Sweep垃圾回收
- 字符串常量池
- 尾调用优化
- [] DEBUG功能
- [] 用户级线程
- [] 类的继承
- minipy -dis {test.py} 打印字节码(常量处理过)
main.c
程序入口vm.c
虚拟机入口execute.c
解释器builtins.c
一些常用的内置方法obj_ops.c
对象的操作符实现argument.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函数class
, 类None
, None类型data
, data类型可以使用C语言自由扩展
- MIT