用纯python实现的arm、x86、msp430、xtensa等的编译器

ppci的Python项目详细描述


ppci(pure python compiler infrastructure)项目是一个编译器 完全用python编写。它还包含语言前端 作为机器代码生成功能。有了这个图书馆你可以 生成(工作!)python中的机器代码!

该项目包含以下内容:

  • 编译器、汇编程序、链接程序和生成系统
  • 语言前端:brainfuck、c3、c、wasm
  • 后端:6500,arm,avr,msp430,openrisc,risc-v,stm8,x86_64,xtensa

警告

此项目处于alpha状态,无法投入生产使用!

你可以在godbolt.org上试试ppci:https://godbolt.org/g/eooaPP

API

编译c3代码的api示例:

>>>importio>>>fromppci.apiimportc3c,link>>>source_file=io.StringIO("""
... module main;
... function void print(string txt) {
... }
... function void main() {
...  print("Hello world");
... }""")>>>obj=c3c([source_file],[],'arm')>>>obj=link([obj])

如何组装一些程序集代码的示例:

>>>importio>>>fromppci.apiimportasm>>>source_file=io.StringIO("""section code
... pop rbx
... push r10
... mov rdi, 42""")>>>obj=asm(source_file,'x86_64')>>>obj.get_section('code').databytearray(b'[ARH\xbf*\x00\x00\x00\x00\x00\x00\x00')

低级API使用示例:

>>>fromppci.arch.x86_64importinstructions,registers>>>i=instructions.Pop(registers.rbx)>>>i.encode()b'['

文档

文档可在此处找到:

gitterappveyorcodecovdocstatetraviscodacygradecodacycoveragedownloadsconda

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java GWT:禁用某些小部件上的所有事件   java Sbt run命令警告未解析的依赖项   班getSimpleName()与用java硬编码类名?   如何设置客户端本地端点Java RMI   java在tensorflow中沿轴选择随机数目的点   java在使用随机生成器的数组中查找缺失的数字   我在游戏中的线索丢失(java)   JavaNIO文件通道。从转移0开始转移?   Storm DRPC中的java更新与RequestReply   REST服务中的java返回XML响应   java如何在Eclipse中使用CXF使用Web服务   java Appengine通道Api存在\u ah/通道/连接不工作   RSA加密Javascript和解密Java   HTTPS站点的java路由HTTP映像   导入JCC时发生java错误。找不到libjava。所以   java下拉选项,可选择更改月份   java在向jasper报告传递日期参数时如何解决ClassCastException?   gradle插件中使用的第三方库的java控件日志记录输出   java是一个单一的logback。用于多个应用程序的xml文件是一种良好的做法?