小Python到C++编译器
pyxie的Python项目详细描述
这能做什么工作?
这个项目的目的是允许成人和儿童在 一种熟悉的高级语言,可以编译为在 任意嵌入式系统-即具有非常低功耗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循环
- 将它们解析为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 兼容性。