当前位置: 首页 > 专利查询>苏州大学专利>正文

一种实现编译型嵌入式Python的方法技术

技术编号:27317158 阅读:71 留言:0更新日期:2021-02-10 09:51
本发明专利技术实施例公开了一种实现编译型嵌入式Python的方法。该方法包括遍历Python源码的抽象语法树而获取程序的语义信息并根据所述语义信息生成对应的C++代码;对Python源码的进行类型注释,从而生成C++的变量定义和函数定义;采用翻译器对经过上述步骤处理过的Python源代码翻译成C++源文件;将所述C++源文件与嵌入式芯片相关的文件存储在一起而形成文件包,对所述文件包进行编译和链接并生成ASCII文本文件。本发明专利技术实施例提供的实现编译型嵌入式Python的方法基于类型注释和静态分析实现源码翻译器,并将翻译器集成至嵌入式平台中,实现了Python源文件的编辑、编译、链接和烧写。烧写。烧写。

【技术实现步骤摘要】
一种实现编译型嵌入式Python的方法


[0001]本专利技术涉及计算机的
,特别是涉及一种实现编译型嵌入式Python的方法。

技术介绍

[0002]MicroPython是一款能够运行于Windows系统、Unix系统和部分微控制器上的超小型Python解释器,它把庞大的Python解释器压缩到256KB以内并且能够支持大部分的Python3功能。Python语言有着比C语言更优秀的可读性和可靠性,使用MicroPython能够有效提高编程效率。Python解释器占用较大的Flash空间和更多的计算资源,不适合用于开发有着低资源占用和高实时性要求的嵌入式应用。
[0003]目前,Cython和PyPy分别提出两种提高Python运行效率的工具,但是都只适用桌面系统编程领域,无法适用于微控制器。Cython提供的方法是用类Python语法编写或引用静态函数供Python解释器调用,本质上还是基于解释器因此不适合用于微控制器编程。PyPy提供了Python的即时编译技术(Just In Time,简称JIT),它在运行时会先把需要使用的函数翻译成本机代码从而提高运行效率,但是JIT本身的运行时间会占用总体运行时间,同时还会造成内存的巨大开销,因此JIT方法也不适合用于微控制器。
[0004]因此,针对上述技术问题,有必要提供一种能够满足实时性、可应用于微控制器的实现编译型嵌入式的Python方法。

技术实现思路

[0005]有鉴于此,本专利技术实施例的目的在于提供一种实现编译型嵌入式Python的方法。本专利技术实施例提供的实现编译型嵌入式Python的方法基于类型注释和静态分析实现源码翻译器,并将翻译器集成至嵌入式平台中,实现了Python源文件的编辑、编译、链接和烧写。
[0006]为了实现上述目的,本专利技术一实施例提供的技术方案如下:一种实现编译型嵌入式Python的方法,包括步骤S1:遍历Python源码的抽象语法树而获取程序的语义信息并根据所述语义信息生成对应的C++代码;步骤S2:对Python源码的进行类型注释,从而生成C++的变量定义和函数定义;步骤S3:采用翻译器对经过步骤S1和步骤S2处理过的Python源代码翻译成C++源文件;步骤S4:将所述C++源文件与嵌入式芯片相关的文件存储在一起而形成文件包,对所述文件包进行编译和链接并生成ASCII文本文件。
[0007]作为本专利技术的进一步改进,所述嵌入式芯片相关的文件包括头文件、启动文件和链接文件。
[0008]作为本专利技术的进一步改进,所述类型注释包括变量注释和函数注释,所述变量注释包括步骤:对Python源码中的单个变量赋值的同时给出所述变量的类型,从而生成对应的C++变量定义;所述函数注释包括步骤:对Python源码中的函数进行定义的同时给出所述函数中参数的类型和所述函数的返回值的类型,从而生成对应的C++函数定义。
[0009]作为本专利技术的进一步改进,所述翻译器的设计过程包括步骤S31:定义翻译内容的
结构,所述结构包括头文件包含区、命名空间定义区和源码区;步骤S32:设计Python的类型至C++的类型的映射关系;步骤S33:采用自底向上的方法对抽象语法树进行语义分析并生成C++代码,将生成的C++代码按照所述翻译内容的结构进行拼接。
[0010]作为本专利技术的进一步改进,所述映射关系如下表所示,其中x,y∈T,T={int,float,str,bytes,bool}
[0011][0012][0013]作为本专利技术的进一步改进,所述步骤S33包括:步骤S331:采用自底向上的子节点访问的方式进行表达式翻译;步骤S332:将语句或者/和语句列表中的每行程序代码翻译成C++代码语句。
[0014]作为本专利技术的进一步改进,所述步骤S332的翻译过程中,需要先将所述语句区分为函数定义语句和非函数定义语句,并将所述函数定义语句所对应翻译成的C++代码语句填入其他作用域语句区域,将所述非函数定义语句所对应翻译成的C++代码语句填入所在作用域的函数体内。
[0015]作为本专利技术的进一步改进,所述抽象语法树为一个结点对象列表,每个对象包括多个子列表或者其他对象的引用,每个列表或者子列表包括任意数量的结点对象。
[0016]作为本专利技术的进一步改进,获取所述Python源码的抽象语法树的过程包括步骤:调用抽象语法树模块的parse()函数,采用dump()函数将parse()函数获取的Python源码的抽象语法树转化为自然语言形式。
[0017]作为本专利技术的进一步改进,将所述ASCII文本文件应用至嵌入式平台时,采用C或者其他语言封装模块实现IO操作。
[0018]本专利技术具有以下优点:
[0019]本专利技术实施例提供的实现编译型嵌入式的Python方法基于类型注释和静态分析实现了源码翻译器,并将翻译器集成到嵌入式平台中,实现了Python源文件的编辑、编译、链接和烧写,突破了现有技术无法将Python实时应用至嵌入式平台领域的缺陷。
附图说明
[0020]为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现
有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0021]图1为本专利技术实施例提供的实现编译型嵌入式的Python方法的流程示意图;
[0022]图2为图1所示实施例中的另一种表达方式的流程示意图;
[0023]图3为应用本专利技术实施例提供的实现编译型嵌入式的Python方法在E-Python-AHL-GEC-IDE编译成功界面的示意图;
[0024]图4为图3所示实施例中的串口接收亮暗改变信息的界面示意图;
[0025]图5为图3所示实施例中的小灯亮起的实际图示。
具体实施方式
[0026]为了使本
的人员更好地理解本专利技术中的技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。
[0027]如图1和图2所示,本专利技术实施例提供的实现编译型嵌入式的Python方法的流程示意图。在该实施例中,实现编译型嵌入式的Python方法包括四个步骤,每个步骤的具体内容如下所示。
[0028]步骤S1:遍历Python源码的抽象语法树而获取程序的语义信息并根据所述语义信息生成对应的C++代码。
[0029]抽象语法树(Abstract Syntax Tree,简称AST)是源代码到目标代码的一种中间表示,用树状结构描述了程序构造。Python的AST可以表示为一个结点对象列表,每个对象包含多个子列表本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实现编译型嵌入式Python的方法,其特征在于,所述方法包括:步骤S1:遍历Python源码的抽象语法树而获取程序的语义信息并根据所述语义信息生成对应的C++代码;步骤S2:对Python源码的进行类型注释,从而生成C++的变量定义和函数定义;步骤S3:采用翻译器对经过步骤S1和步骤S2处理过的Python源代码翻译成C++源文件;步骤S4:将所述C++源文件与嵌入式芯片相关的文件存储在一起而形成文件包,对所述文件包进行编译和链接并生成ASCII文本文件。2.根据权利要求1所述的实现编译型嵌入式Python的方法,其特征在于,所述嵌入式芯片相关的文件包括头文件、启动文件和链接文件。3.根据权利要求1所述的实现编译型嵌入式Python的方法,其特征在于,所述类型注释包括变量注释和函数注释,所述变量注释包括步骤:对Python源码中的单个变量赋值的同时给出所述变量的类型,从而生成对应的C++变量定义;所述函数注释包括步骤:对Python源码中的函数进行定义的同时给出所述函数中参数的类型和所述函数的返回值的类型,从而生成对应的C++函数定义。4.根据权利要求1所述的实现编译型嵌入式Python的方法,其特征在于,所述翻译器的设计过程包括:步骤S31:定义翻译内容的结构,所述结构包括头文件包含区、命名空间定义区和源码区;步骤S32:设计Python的类型至C++的类型的映射关系;步骤S33:采用自底向上的方法对抽象语法树进行语义分析并生成C++代码,将生成的C++代码按照所述翻译内容的结构进行拼接。5.根据权利要求4所述的实现编译型嵌入式Python的方法,其特征在于,所述映射关系如下表所示,其中x,y∈T,T={int,float,str,bytes,bool}注释的类型翻译后的类型intintfloatfloatstrstri...

【专利技术属性】
技术研发人员:王宜怀许明宇帅辉明余文森蔡闯华
申请(专利权)人:苏州大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1