2 Star 4 Fork 3

xupingmao / minipy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

 __    __     __     __   __     __     ______   __  __    
/\ "-./  \   /\ \   /\ "-.\ \   /\ \   /\  == \ /\ \_\ \   
\ \ \-./\ \  \ \ \  \ \ \-.  \  \ \ \  \ \  _-/ \ \____ \  
 \ \_\ \ \_\  \ \_\  \ \_\\"\_\  \ \_\  \ \_\    \/\_____\ 
  \/_/  \/_/   \/_/   \/_/ \/_/   \/_/   \/_/     \/_____/ 
                                                           

minipy

Build Status

迷你Python解释器,Python实现的编译器+C语言实现的VM.

注意:本项目主要是用于学习编译器相关原理,如果需要用于生产环境,可以参考以下项目

如何开始

编译解释器

cd minipy
make && make test

# and enjoy yourself ^_^

打包成可执行文件

# 编辑 pack/main.py

# 打包
python3 build.py pack

# 执行打包后的文件
./pack_main

特性

编译器

位于 /src/python

  • mp_opcode.py 字节码定义
  • mp_tokenize.py 词法分析器,将代码转换成单词(tokens)
    • 运行 python mp_tokenize.py {script.py} 可以打印出单词
  • mp_parse.py 语法分析器,将单词(tokens)转换成语法树(Syntax Tree)
    • 运行 python mp_parse.py {script.py} 可以打印出语法树
  • mp_encode.py 代码生成器,将语法树(Syntax Tree)转换成字节码(opcodes)
    • 运行 python mp_encode.py {script.py} 可以打印出字节码(未处理过的)

特性

  • 基于栈的计算机模型,字节码定义在 src/python/mp_opcode.py
  • 支持异常处理,基于setjmp/longjmp实现
  • 支持Native方法扩展
  • 支持常用的Python类型
  • 支持函数定义、简单类定义
  • Mark-Sweep垃圾回收
  • 字符串常量池
  • 尾调用优化
  • [] DEBUG功能
  • [] 用户级线程
  • [] 类的继承

工具

  1. minipy -dis {test.py} 打印字节码(常量处理过)

代码结构

  1. main.c 程序入口
  2. vm.c 虚拟机入口
  3. execute.c 解释器
  4. builtins.c 一些常用的内置方法
  5. obj_ops.c 对象的操作符实现
  6. argument.c 函数调用参数API
  7. exception.c 异常处理
  8. gc.c 垃圾回收器
  9. string.c 字符串处理
  10. number.c 数字处理
  11. list.c 列表处理
  12. dict.c 字典处理
  13. function.c 函数/方法处理

类型系统

  1. string, 是不可变对象
  2. number, 全部使用double类型
  3. list, 列表(动态数组)
  4. dict, 哈希表
  5. function, 包括native的C函数和自定义的Python函数
  6. class, 自定义Python类型
  7. None, None类型
  8. data, 自定义的C语言类型

相关项目

其他Python的实现

  • CPython Python的官方实现版本
  • micropython 嵌入式版本
  • tinypy 64K的迷你版本,支持Python的部分子集
  • cython Python的超集,可以把Python转换成C语言编译以提升运行速度,同时也可以简化Python的C语言扩展的开发

其他嵌入式脚本语言实现

更多有意思的编译器项目

  • ShivyC 一个Python编写的C语言编译器
  • NASM 跨平台的x86汇编和反汇编器

协议

  • MIT
The MIT License (MIT) Copyright (c) 2015-2017 徐平茂 578749341@qq.com Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

迷你Python解释器(A python interpreter) 展开 收起
Python 等 6 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Python
1
https://gitee.com/xupingmao/minipy.git
git@gitee.com:xupingmao/minipy.git
xupingmao
minipy
minipy
master

搜索帮助