基于Python的嵌入式开发工具的设计与实现

2022-11-11 14:52河南开封科技传媒学院刘洋李冉白德华
数字技术与应用 2022年2期
关键词:词法编译器代码

河南开封科技传媒学院 刘洋 李冉 白德华

现阶段嵌入式微控制其开发工具在具体的应用过程中通常情况下存在开发流程相对较为繁琐,并且功能方面较为单一,同时价格方面相对较高。所以展开对嵌入式设备的使用的编译器还有集成开发环境的有效研究,通过采用Python嵌入式开发工具的设计与实现从而一定程度降低嵌入式设备开发阶段的成本同时改变开发工具的单一问题。

嵌入式设备的开发通常情况下是围绕着嵌入式微控制器还有相关外部设备进行设计与开发的。相较于普通类型的台式计算机的处理器,嵌入式微控制器成本相对较低,然而嵌入式微控制器的开发研究成本相对较高。

1 DE语言编译器的设计与实现

1.1 编译器的构建

编译器的开发过程相对较为复杂,其在开发的过程中需要经过词法以及语法还有语义的有效分析同时还需要进行代码的生成等相关环节。原始代码需要通过采用语法分析器编程展开逐个的标识,然后通过语法分析器进行抽象语法树的构建,语义分析器展开对抽象语法树的遍历,处理完以上工作以后还需要借助代码生成器实现对代码的有效合理转化。在进行语法分析的过程中通常情况下所采用的为不确定有穷自动机到确定有穷自动机的转换以此展开对词法分析器的有效建设。对于语法分析来讲其主要涉及到两大类型的算法,自顶向下与自底向上两种。自顶向下类型的算法通常情况下在手工构造编译器内进行应用,然而自底向上的算法大多数会采用第三方的解析器进行编译器的建设。

1.2 编译器构建工具

在进行对编译器的构建过程中相对较为复杂,编译器工具的采用能够极大程度上降低工作的发在程度,以此使得开发人员能够更加专注于进行语言编程设计上。经常使用的编译器构建工具主要有Lex和Yacc以及Ply还有Spark等。尽管Lex与Yacc等编译器构建工具能够一定程度上实现编译器开发的有效简化,然而由于其在应用的过程中主要是其所采用的语法为独立语法从而使得开发人员需要进行语法的学习以此使得其复杂程度提高。DE编程通过采用Python语言进行编译器的构建,相较于其他类型的编译器来讲,更加灵活方便同时代码也相对较为容易展开有效地测试与维护。在展开对词法以及语法的解析过程中,采用Python语言的Ply模块一方面能够有效保留Python的特性,另一方面还能够使其保持与Lex以及Yacc语法风格方面的一致性。并且,由于Ply主要是采用Lalr语法分析算法的,因此能够有效确保其性能以及语法特性上的均衡性。

1.3 DE语言词法分析部分的设计

DE语言词法分析部分采用Python语言的Ply模板进行构建的,通过此种方式能够一定程度上确保词法分析器的跨平台以及可扩展性。采用Ply模块进行词法分析的过程中,需要对代码内的词组注意解析成为一个个标识。Ply模块在标识解析的过程中需要对所有标识的定义还有名称予以对应同时还需要以“t”开头。并且采用Python语言其具有一定的自省特性,能够通过文档字符串的定义实现对各个标识的定义。其能够直接对简单节点通过正则表达式展开定义,然而针对关键字等方面的定义需要采用额外定义独立的函数同时还需要辅助字符串实现定义。DE语言的标识主要采用Python语言自带的集合数据结构进行存储,但是关键字通常情况下是采用Python语言自带的字典数据结构实现存储。

1.4 DE 语言语法分析部分的设计与实现

在处理完词法分析以后,所输入的代码将会被解析成为逐个的标识进行存储,从而方便后续工作中对于语法方面的分析识别应用。DE语言的语法分析也是采用的Ply模块,采用Lalr进行部分改模块语法分析,通过此种方式确保语法分析的高效。采用Ply模块展开对语法的分析过程中,应当对各个标识定义还有其名称相对应的以“P”开头的方法。在展开具体的语法分析过程中,Ply模块的终结符必须采用大写字母,非终结符则采用小写字母。在采用Ply模块展开语法分析的过程中,需要为各个标识节点进行一个类的定义,在展开语法接卸的过程中,Ply将会自动地把构造的实例实现有效地拼接从而实现抽象语法树的构建。

1.5 DE语言语义分析部分的设计与实现

借助Python语言自省的特性还有访问者的模式能够相对有效实现自定类型语法树的遍历,并且需要采用每个的描述节点的类均拥有统一的遍历用的接口。此处各个描述节点的类均继承了Node的类,借助此类的Accept方法实现对其子节点的遍历。但是拥有容器功能的类需要继承自ListNode类。在具体的编码中Node类所拥有的Accept方法能够借助Python自省功能进行对访问者实例内的节点名称的有效查找,同时能够进行对以“Visit”为前缀的调用,对应节点名为后缀的方法。

1.6 DE 语言虚拟机的设计与实现

为了使得验证DE语言编译器设计便捷化,采用Python语言进行软件仿真验证用虚拟机的构建,因为虚拟机是采用Python语言完成的,因此其中的对象能够采用Python的动态特性,在进行虚拟机仿真的过程中能够采用Python语言内的大数类型,但是不需要考虑与大数相关的问题。并且堆栈的状态下,各条指令的执行时间观测与模拟相对较为方便。

2 OOC面向对象框架的设计与实现

OOC框架主要是采用元标称技巧还有现代C编译器的宏的特性,展开对C语言展开有效地扩展,其在形式上与C++相同并且实现了对面型对象思想中多态的模拟,具有单根继承特性。一方面使得维护性与可重用性得到了一定程度的提升,另一方面还实现了原生面向对象代码向C语言移植环节的有效简化。OOC框架通过把对象模型还有类型系统的设计进行有效地分离从而实现功能与易用性间的平衡,从而使其侧重于对象模型设计与实现的简化。针对OOC框架内的对象模型主要是综合利用了元编程技巧还有现代C编译器的特性,以此实现了开发的简化,确保且应用方便程度,并且能够对有效的模拟面向对象的基本特性。OOC对象模型通过把虚表结构还有实例结构的有效分离,进行对成员与方法的有效区分,实现内存节约的作用。同时在虚表结构内增添了一个成员展开对实例的计数。为了提高简洁程度,OOC框架省去了C++模型内与运行阶段类型信息相关的结构,然而此方面对于面向对象内的封装还有继承以及多态特性的模拟不会造成影响。OOC框架主要是通过若干个模块构成的,其中较为关键的部分定义在OOCore模块内。采用OOBase模块进行对其予以有效地扩展,从而使其能够支持单根继承还有虚表结构。OOC框架内的继承关系每加深一级,均会在实例结构的尾部多分配一个双重泛型指针指向当前类型虚表结构,同时实例结构头部内虚表指针指向的则是最后以及类型的虚表结构。采用双重泛型指针能够确保在进行构造以及析构的过程中直接通过实例的构造或者析构函数进行对虚表结构内的实例计数用的成员进行有效地修改,并且如此设计避免了额外的全局变量的引入,通过此种方式提高了整体架构的灵活性。通过在OOC框架内进行调试层的添加从而使得程序的调试变得便捷,调试层能够与GCC配合从而一起使用。在宏开关内将调试选项打开同时把调试层进行一起编译过程中,调试层能够对New宏还有Delete宏内所封装的malloc函数以及free函数进行有效地替换,以此实现对内存的有效分配以及进行记录的释放和输出。将释放的记录输出到相应的文件内,同时利用相关工具进行函数调用关系图表。

3 DB图形化集成开发环境的设计与实现

针对DB集成开发环境来讲其在功能方面主要涉及到工程的管理以及外部程序的调用还有代码的编辑等内容。对于工程管理其直接采用文件目录展开的管理,经过对不同文件后缀进行类型的有效识别。代码编辑器主要是采用的多窗体代码编辑器,其主要是以QSintilla以及PyQty图形库为基础进行开发的,其具有明显的现代编辑器特性。在进行程序的调用过程中主要是借助Qt图形库内QProcess模块进行对外部程序的有效调用,以此实现了对代码编译以及下载功能的有效整合,并且还能够把Shell进行有效地嵌入。

DB集成开发环境在开发过程中所采用的模式为自底至上的模式,并且工程管理其还有代码编辑器主要部件在设计过程中使其能够进行独立运行,然后通过主程序实现对各部件的有效整合。在具体的整合环节涉及到各部件之间相应消息的传递。进行消息的传递主要是借助Qt库内的信号以及槽的机制。在Qt框架内,各个信号均能够与所有事件进行绑定,同时能够实际情况进行动态情况下的绑定解除或者进行过滤器的有效添加展开屏蔽。

针对DB集成开发环境来讲由于其属于集成开发环境,需要进行项目工程的管理,其能够通过直接使用文件展开对工程的管理。DB集成开发环境有效扩展了QFileSystemModel类,同时采用QTreeView类通过树状控件的形式予以显示。针对DB集成开发环境中C语言还有DE语言等代码编辑器主要是借助QScintilla模块。对于Scintilla编辑器来讲其适用于Python的绑定。其功能主要涉及到语法样式高亮以及错误提示还有自动补全等功能,同时其还能够支持多样式功能。此模块通过与Python语言的有效结合从而一定程度上实现了开发流程的有效简化。现阶段的集成开发环境中通常会支持内嵌Shell的功能,从而有助于其他应用程序的调用,DE集成开发环境也具有该项功能。针对普通应用,能够直接采用Python的subprocess模块便能够进行外部程序的调用,然而针对集成开发环境下内嵌的Shell工具,在实际的应用过程中需要支持输入命令可交互以及执行程序无阻塞还有返回信息能够被及时捕获。因此,采用了Qt内的QProcess类,其能够实现异步外部程序的调用,对于Qt界面的交互不会产生影响。通过设计一个名为Monitor的类从而实现DB集成开发环境的Shell,此类集成自QWidget类,主要涵盖了QProcess类与QTextBrowser类的实例。在进行DB集成开发环境的嵌入环节,在以此为条件进行名为Launcher类的设计,借助QTextBrowser部件能够令DB集成开发环境实现同时多个Shell。为程序启动器的类的继承关系,采用程序启动器在DB集成开发环境中进行“ls”命令的执行。完成执行以后则会返回至当前执行定指令名称还有调用程序返回定结果。采用该种方式,把需要的功能与图形化定按钮展开有效的绑定,以此提高文件操作的便捷性。

通过借助PyQt图形库还有QScintilla编辑器构建工具进行嵌入式设备的图像化集成开发环境DB的设计,进而展开对DE语言还有C语言的OOC框架的有效整合,从而提升开发的简洁性。

4 结语

基于Python的嵌入式开发工具的设计与实现,能够有效解决嵌入设备开发成本较高的问题以及开发工具单一性的情况。然而现阶段该方面的设计存在一定的不足,在今后的研究过程中应当注重功能的丰富以及简洁性的提升,以此促进程序开发的有效发展。

猜你喜欢
词法编译器代码
基于相异编译器的安全计算机平台交叉编译环境设计
创世代码
创世代码
创世代码
创世代码
应用于词法分析器的算法分析优化
谈对外汉语“词法词”教学
通用NC代码编译器的设计与实现
2010年高考英语“相似”考题例析
编译器无关性编码在微控制器中的优势