小Python到C++编译器

pyxie的Python项目详细描述


< Hy> pyx-一个小Python到C++编译器

这能做什么工作?

这个项目的目的是允许成人和儿童在 一种熟悉的高级语言,可以编译为在 任意嵌入式系统-即具有非常低功耗CPU和 几乎没有记忆。(ie设备太小,无法承载python 解释器/运行时)

现在是阿尔法前。但是,从2016年9月开始 可用于编译可以运行的非常简单的python程序 直接在Arduino上,从那些可以控制伺服系统开始。 这意味着小型python驱动的机器人:)

它将有助于支持像童子军协会 "数字制造商"徽章。不过,这还算公平。

给我看看你能编译的东西

目前它可以编译非常简单的python程序类型 看起来像是一个等价的(简单的)C++程序。

示例程序:

age = 10
new_age = 10 +1
new_age_too = age + 1
new_age_three = age + new_age_too
foo = "Hello"
bar = "World"
foobar = foo + bar

print(10-1-2,7)
print(1+2*3*4-5/7,25)
print(age, new_age, new_age_too)
print(foo, bar, foobar)

countdown = 2147483647
print("COUNTING DOWN")
while countdown:
    countdown = countdown - 1

print("BLASTOFF")

示例结果:

#include <iostream>
#include <string>

using namespace std;

int main(int argc, char *argv[])
{
    int age;
    string bar;
    int countdown;
    string foo;
    string foobar;
    int new_age;
    int new_age_three;
    int new_age_too;

    age = 10;
    new_age = (10+1);
    new_age_too = (age+1);
    new_age_three = (age+new_age_too);
    foo = "Hello";
    bar = "World";
    foobar = (foo+bar);
    cout << ((10-1)-2) << " " << 7 << endl;
    cout << ((1+((2*3)*4))-(5/7)) << " " << 25 << endl;
    cout << age << " " << new_age << " " << new_age_too << endl;
    cout << foo << " " << bar << " " << foobar << endl;
    countdown = 2147483647;
    cout << "COUNTING DOWN" << endl;
    while(countdown) {
        countdown = (countdown-1);
    };
    cout << "BLASTOFF" << endl;
    return 0;
}

它是做什么的?

当前:

  • 用简单的语句识别简单的顺序python程序
  • 可以处理基本条件和while循环
  • 自定义包含和对C/C++函数的函数调用(在内部) 限制)
  • 将它们解析为ast
  • 可以使用具体的c表示来表示等价的c程序 (CST)
  • 可以将AST翻译成CST,然后从C++生成C++代码 CST

它支持的python结构:

  • while循环语句
  • 比较
  • if/elif/elif/else语句
  • 对于循环-特定于范围(y)内的x
  • 函数调用我们链接的库

现在几乎可以使用真正有用的程序了。

这是起点,不是终点。为此,请看一下 语言规范

pyXE是一个简单的Python到C++编译器,带有目标 编译python代码以便它可以在微控制器上运行- 像Arduino、MSP430或ARM MBED类型的设备。

这个名字是一个文字游戏。具体来说,Python到C++可以是py2CC。 或者PYCC。如果你试着发音"py cc",它可以是"pic","pycc"或 PYC-C"。最后一个指向pixie。

<>这不太可能是C++编译器的一个完全通用的Python。 -如果你想看看蜕皮之类的东西 还有PyPy。(在减少相似性方面)区别在于 这个项目有一个很小的目标 装置。类似于ATMega 8A、ATMega 328或更高版本的东西 有能力。

在过去,我编写了一个测试驱动的编译器套件,所以 遵循同样的方法。它真的考虑过让Pyxie 用它作为前端,但目前,我想用python 兼容性。

为什么不使用micropython呢?micropython是 ace 。如果你的设备很大 足以支持micropython运行时,请使用它!目标是 非常小的微控制器-那些太小甚至不能支持的微控制器 micropython-像msp430、atmega 8a或类似的微型mcu。

在过去,我编写了一个测试驱动的编译器套件,所以 遵循同样的方法。它真的考虑过让Pyxie 用它作为前端,但目前,我想用python 兼容性。

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

推荐PyPI第三方库


热门话题
将中心面板添加到“我的内容”窗格时,java GUI对象消失   java无法更新oracle中的clob字段   php Linux+动态插入的Java小程序=在NPObject上调用方法时出错   java JVisualVM探查器代理jar已加载,但代理初始化失败   java Android在运算符和TextView值方面存在问题   用于OpenPGP智能卡小程序的rsa解密APDU   Java GUI按钮不会添加到面板中   java找不到移动图像(或其他可单击对象)的方法   java中Do/While循环的问题   多线程使java程序在没有线程的情况下休眠   java如何在Webflux功能端点的测试中禁用Spring安全性   如果存在后退历史记录,则java WebView仅显示后退按钮   通过USB将Arduino中显示的java错误数据传输到Android   java如何使用安卓 studio从4层父节点firebase获取子节点数据   jpanel中JLabel的java搜索栏   来自gallery/camera的java Android图像预览不同