




已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
太原理工大学毕业设计(论文)用纸自定义计算机语言编译器摘要汉语编程一直是所有以汉语为母语的程序员的梦想。作为以汉语为母语的程序员,每次编程时最发愁的事可能就是文档中大段大段的英语,想要找到相应功能的方法总是非常头痛。中国传统文化中易经八卦的思想又非常符合现代编程中的思想。高级计算机语言程序中任何标识都可以使用中文字、词、词组和句子的语言文法,又有与中文相匹配的语言语法规则可称为汉语编程语言,使用这种语言编写的程序的过程就是中文编程。汉语编程不但可以使编程更加普及,也能使编程效率提高。本论文研究的是基于汉语的自定义计算机编程语言N语言编译器,N语言以C语言为基础,在此上加入了一些关键字替换等,以一个单一的汉字来替换有好几个字符的英语单词,简化编程过程,提高编程效率。N语言编译器以linux下的Qt搭建界面框架,采用C+编写,主要实现了一个源(N语言)到源(C语言)的编译器及主要的语法高亮、函数折叠、查找、替换、重排版、自动补全等功能。本论文主要介绍了这一课题的编写背景、所实现的功能以及具体的开发过程。关键词:汉语编程;C语言;编译器;C+全套设计加扣 3012250582IVA New Programming language And Its CompilerAbstractProgramming in Chinese is always a dream of all the programmers who use Chinese as their mother language. As one of the programmer who uses Chinese as the first language, every time when I program, the most trouble thing is when I looking in the document for a proper way to achieve my goal, there always been tons of billions of English which annoyed me so so much to find out the right way to implement my functions. The Zhouyi philosophy in traditional Chinese culture is very similar to the modern programming. Any high-level computer programming language can be used to identify the text , words , phrases and sentences of the language grammar , but also to match with the Chinese language grammar rules may be called Chinese programming language. The process of using this kind of language can called programming in Chinese. Programming in Chinese can not only make programming more popular, but also improve the efficiency of programming.This graduation thesis tells about a self-defined programming language that based on Chinese : the compiler of N. Program language N is based on C programming language, exchange some key word, replace the long English word by a single Chinese character, to simplify the programming process, improve the efficiency of programming. This compiler for N is based on Qt of Linux to draw the interface, is programmed by C+. It is a compiler changes program language N to program language C. It is a simple compiler had this function: basic syntax highlight, function folding, find and replace, re-layout and auto-complete, etc. This thesis introduces the background of this topic, the function it can do and the specific progress of programming this compiler.Keywords: Chinese programming language; C Language; complier; C+ 太原理工大学毕业设计(论文)用纸目录摘要IAbstractII1 绪 论11.1 N语言的定义11.2 N编译器11.3 汉语编程意义11.4 开发技术22 需求分析32.1 可行性研究32.1.1 技术可行性32.1.2 经济可行性52.1.3 时间可行性52.2 系统的功能要求52.2.1 基本功能52.2.2 附加功能62.3 系统的性能要求72.3.1 可靠性要求72.3.2 时间要求72.3.3 稳定性要求73 关键技术83.1 Qt 概述83.2 Qt模块83.3 Qt图形用户界面93.4 Qt信号与槽机制93.5 布局管理103.6 Main Window103.7 Graphics View113.8 Qt元对象系统114 概要设计134.1 系统总体结构134.2 N语言的定义134.3 C语言编辑器144.4 N语言编译功能的集成144.5 字符编码问题145 详细设计与实现175.1 自定义计算机编程语言-N语言175.2 编译器详细设计175.2.1 语法分析部分175.2.2 N语言的编译功能205.2.3 main205.2.4 其他附加功能215.3 系统主要运行界面225.4 关键代码276 系统测试306.1 测试方法306.2 测试用例306.2.1 对C语言编译功能的测试306.2.2 对N语言编译的测试316.2.3 对编辑器功能的手动测试346.3 测试结果35结论36参考文献37致谢38外文资料39中文翻译74 太原理工大学毕业设计(论文)用纸1 绪 论1.1 N语言的定义N语言是一种自定义的编程语言,基于C语言基本语法及实现,用简洁明了易于编写便于记忆的单个汉字替换了繁杂长度惊人编写不便的英文关键字,简化了编程过程。如将if-else改为若-其,减少输入过程,便于观察编写。方便了许多不懂英语的儿童或者其他人能够在无需多学一门外语的情况下进行编程,领略编程的魅力,有利于编程思想的普及,促进汉语母语国家计算机教育的发展。基于C语言一方面是由于大部分试验型的编程语言都会将C语言作为输出,而且C语言是很多计算机语言学习的入门语言;另一方面是因为C语言不依赖于任何虚拟机,不像java一样需要依赖于JVM或者C#需要.NET Framework,在大部分计算机上都有C的编译器可用。C语言是最基础的面向人类的编程语言,便于实现,有通用性,能被任何程序调用。本自定义计算机语言N语言在本地化方面改进C语言的同时保留了C的字符如“*”,“#”等,使得程序编写过程中可以调用C语言丰富的库函数,同时也可以继续操作指针,保留了C语言最令人心醉的特点。1.2 N编译器本N语言编译器产生的目标程序为面向人类的程序设计语言C语言,它需要进一步的转换才能在计算机上直接执行(本编译器为gcc(GNU Compiler Collection,GNU编译器套装)/tcc(Tiny C Compiler,by Fabrice Bellard)。由于大多数计算机上都有如上C编译器可用,这使得目标程序(即C程序)可在所有这些系统上执行,代价是需要一次额外的编译才能得到最终可运行的目标程序,类似于本N语言编译器的编译器也称为“源到源的转换器”。本编译器是在linux下用一个跨平台C+图形用户界面应用程序开发框架Qt搭建界面,方便地实现了很多功能,如复制-剪切-粘贴等,方便了编程过程,增加了用户编程体验。此编译器实现的辅助功能有:编辑时的撤销、重做、查找、替换,格式上的自动换行、自动缩进、字体的调整,编译过程的设置,对代码进行重新排版、显示函数列表、快速注释与反注释、自动补全(主要应用于C的编写),还可以自定义界面区块的显示与否,选择内置的几种配色方案等,算是一个功能还算齐全的编译器。1.3 汉语编程意义如今的编程都是基于英语,想要编程起码得掌握英语这门很可能会被高考抛弃的、繁杂且没有规律的语言。即使学习了英语,庞大又混乱的英语词库又成了挡在文档和编码实现之间的拦路虎。即使掌握了编程思想,过不了英语这一关,很多时候连最基本的文档都无法借鉴,对于那些拥有丰富API的编程环境更是如此,程序员只好自己想方法实现那些已有的东西,很是浪费时间。在一些有强大类库支持的语言编码中,文档多是用英语写成而且由于更新快,类数量较多,大多没有中文翻译的文档,给英语非母语国家的编程人员的提高改进造成了很大的困扰。汉语编程,比较知名的如“易语言”,一直都在努力地试着改变中国人编程的方式,想把编程的门槛降低到只要认识汉字就能编程,能方便地掌握编程思想的地步。但是易语言的缺点是关键字还是一些由汉字组成的双字词或者更多字的词,完全没有将汉语优美简洁的特性以及汉语庞大的字库体现出来。N语言这个自定义编程语言就是基于此目的,将中国传统文言文的简明融入编程语言,试着将编程变成一件充满艺术感的创作,让更多人加入到全球信息化的浪潮,给学龄前儿童或是其他已经没有精力再学习英语的人一个编程的机会,体验程序之美,学习并感受编程思想,有助于思维的发展。由于水平有限,这一设计仅仅是简单地将C语言的关键字做了汉化处理,相信在经验逐渐增加的未来,这一语言会发展壮大。1.4 开发技术本N语言编译器及编程语言N语言的设计和编写借鉴了软件工程的思想和开发流程进行,从拿到题目时的需求分析开始,分析了本自定义计算机语言编译器实现的可行性,接下来进行概要设计,大致列出完成这一设计所需的功能框架,然后在详细设计以及编码阶段完成具体的自定义语言设计和编译器的编码,再进一步迭代,增加功能,每轮都会进行一定数量的测试,检测程序问题,找出需要改进的地方在下一轮的编码中进行改进。本编译器采用了跨平台图形用户界面应用程序开发框架Qt搭建基本的界面,用面向对象语言C+实现了N语言转C语言的编译功能。词法分析的过程用结构体struct定义了语法行首指针,词法分析,函数列表,参数表等结构,分析输入的程序并实时加入高亮等功能,在将源程序编译为目标语言C语言后,采用了linux下的tcc(Tiny C Compiler,by Fabrice Bellard)编译器(若检测到环境中没有集成tcc,则采用gcc)来编译目标C语言程序,跳出shell显示运行结果。2 需求分析汉语编程一直是几乎所有以汉语为母语的程序员所想过的事情。在网上搜索“汉语编程”,会发现讨论的人数还是比较多的,褒贬不一,很多人说现今的汉语编程只是单纯地将英语单纯翻译成汉语,其他方面毫无新意。这确实是如今一个尴尬的事。表音的英语确实无法和表意的汉语相提并论,两者单纯地转换确实会发生一些不愉快的事。还有就是现代汉语和古代汉语的区别。相对于古代汉语文言文的简洁明了,现代汉语确实在表达方面稍微繁琐了一点。由字符组成的编程语言说起来其实由言简意赅的文言词表示更适合。汉语编程的优点:言简意赅,易于表达。汉字不像英语那样由单纯的26个字母组成,在字库方面有着先天优势,能用单字来表示英语有时需要很长的一段单词才能完成的意思。汉语组合性强,可以很轻易就实现扩展。汉语造词能力较强,能在新事物面前保留长度不受限意义丰富的事物。汉语能在不显著增加代码量的情况下轻易就实现具有相同属性的不同对象。汉语编程的缺点:汉语有多义性。有时汉语的同一句话会有不同的含义,但是这点在字符化的编程语言里由于有了种种规范,影响不是很大。编码问题:在某些系统中汉字的编码是一个大问题。如此次的Qt环境,编程时的注释有很多都无法正常显示,但是只要掌握了字符编码的种种奥秘,编码就不再是一个问题。2.1 可行性研究2.1.1 技术可行性自定义计算机语言编译器,实现需要设计一门自定义计算机语言并实现此语言的编译。在设计自定义语言的时候,初步的设想是综合一下已有的各类编程语言的优秀特性,完成一个近乎“全能”的编程语言。在初步学习总结的过程中主要学习了Go语言(google,2009)、Objective-C(Brad Cox,1980)、Python(Guido van Rossum,1991)、Zimbu(vim编写者Bram Molenaar)等,总结了这几种语言的主要特性如:go语言的数组切片、函数不定参数、用逗号case多个值、去掉break关键词(自动加入break关键字); objective-c关于类方法和实例方法的+-标识、方法名中插入参数、property和sythesize关键字来自动生成属性的getter和setter;Python的dictionery类型实现键值对、快速枚举的for(.in.)方法;Zimbu的“”符号分隔数字等增加易读性。在初步设计语言的过程中忽然发现自身在编程实践方面的欠缺,没有长期经验的积累,不能针对特定的编程目的进行有效的语言特性转化,单单将语法上一些自认为不错的东西凑到一起没有太大的意义。因此,想起了在进行ios应用编程时作为初学者,不熟悉API的时候查文档时满屏英语的费劲,便将目光转向了编程本地化,设想设计一门给英语门外汉用的汉语编程语言。设计一门汉语编程语言有国内的如“易语言”可进行借鉴,鉴于母语是汉语,对汉语的了解比较深刻,再结合一下之前学过的编程语言,设计自定义语言在技术上完全可行。自定义计算机语言的编译器的实现需要产生目标语言为C语言,所需完成的工作是界面的实现以及N语言到C语言的转换。界面的实现主要选择了大学期间学过的,比较熟悉的Qt,C+,完成对中文字符的转换分析以及其他一些编程时在界面上的附加功能。Qt提供了很多内置类便于对界面和功能进行方便的操作。Qt有信号和槽机制,添加了Q_OBJECT宏,是对所有定义了信号和槽的类所必须的,这样就可以实现Qt的信号和槽机制。Signal关键字实际上是一个宏,Qt中C+的预处理器会在编译程序找到它之前把它转换成标准C+代码。Slots关键字也是一个宏,也可以扩展成为C+编译程序能够处理的一种结构形式。在信号和槽机制中,如果信号想要和槽成功连接,他们的参数必须有相同的顺序和相同的类型,如果信号的参数比它所连接的槽的参数多,多余的参数会被忽略掉。而当参数的类型不匹配,或者信号和槽有不存在的现象,Qt会发出警告。利用这点能够进行对编译器界面的操作。closeEvent()是QWidget中的一个虚函数,当MainWindow被关闭时会自动调用。可以在编译器被关闭时进行文件是否需要保存的判断。Widget(窗口部件)是用户界面里的一个可视化元素,该词起源于“window gadget”(窗口配件),相当于windows中的控件(control)和容器(container)。利用这样的控件,可以方便地实现所需编译器的界面。Qt的程序和本地程序看起来一样,它能通过所模拟平台的视觉外观实现与所在平台风格的统一,利用这一点,可以编写出能够移植到不同平台使用的应用程序。在头文件中的前置声明可以使得编译过程变快,这一点对于类似本例这样较为大的程序来说,能够加快编译后的运行速度。这个头文件包含了Qt GUI类的定义,在程序中包含它可以不用包含一些具体控件,在头文件中包含此头文件后可以使针对界面的编程在需要用到很多内置控件时无需导入很多的头文件。字符串中使用“&”符号来表示快捷键。利用这一点能够进行编译器快捷键的实现,使得编译器更符合用户通常的使用习惯。Qt提供了三个内置检验器类:QIntValidator、QDoubleValidator和QRegExpValidator。QRegExpValidator带了一个正则表达式“”Qt中为应用程序提供图片的方法有很多,如:把图片保存在文件中,并且在运行时把他们载入;把XPM文件包含在源代码中;使用Qt的资源机制(resource mechanism)。本例中交替使用了资源机制和载入文件的方法,资源机制比运行时再去载入文件的方法更方便,而且该方法也适用于所支持的任意文件格式。做法就是先创建一个资源文件,并且在识别该资源文件的.pro文件中添加一行代码:RESOURCES+=resources.qrc。在qrc中可以添加所需的图片。这些资源文件会被编译到应用程序的可执行文件中,引用时需要使用带路径前缀:/(冒号斜杠)的形式。QMainWindow中菜单栏的创建在Qt中被简化为“动作”,一个“动作”就是一个可以添加到任意数量的菜单和工具栏上的项。步骤包括:创建并设置动作、创建菜单并且把动作添加到菜单上、创建工具栏并把动作添加到工具栏上。动作有一个快捷键、一个父对象、一个图标、一个加速键和一个状态提示。QKeySequence:StandardKey是系统中用于特定功能的标准化键盘快捷键,能根据Qt运行的平台提供正确的快捷键。利用这一点可以创造出移植性良好的程序,在不同的平台实现快捷键的本地化。QFileDialog:getSaveFileName,若用户输入的文件名已经存在,则其会要求用户确认是否需要覆盖该文件。如果想要在不提醒用户的情况下直接覆盖,需要给getSaveFileName()函数传递一个QFileDialog:DontConfirmOverwrite附加参数来实现这一行为。本例中默认让用户自己判断是否需要覆盖。Qt中的每一个QWidget都有一个windowModified属性。如果当前的窗口的文档有没有保存的变化,它会是true,否则是false,表现在窗口名称后的一个“*”。利用这一点可以在编译器的代码编辑框实现编辑和标题栏显示的同步,还可以利用它进行文件是否编辑,是否需要保存的判断。对话框:Qt中的“非模态”对话框是一种运行在应用程序中,对于任何其他窗口都独立的窗口。创建后需要调用show()、raise()和activateWindow()让窗口显示、成为顶层窗口和激活状态。“模态”的对话框窗口是一个在得到调用后会弹出并可以阻塞应用程序的窗口,从而会从它被调用开始起妨碍其他的任意处理或者交互操作,直到该窗口关闭为止。通过show()调用的对话框是非模态对话框,在调用setModal()后才会变成模态的,而通过exec()调用的对话框是模态对话框。本例中采用的是exec()调用的,因为程序需要阻塞来判断是否需要保存,而在此期间对代码编辑框的改变将是错误的。readSetting()和writeSetting()会保存应用程序存储的设置。这些设置是与特定平台相关的。在windows中它使用的是系统注册表,UNIX中是文本文件等。QSeting构造函数的参数是程序的组织名字和应用程序的名字,利用此来查找这些设置所在的位置。它把设置的信息存储为键值对(key-value pair)的形式。键与文件系统的路径很相似,因此能使用路径形式的语法指定子键的值,或者还能使用beginGroup()和endGroup()的形式。值可以是一个int、bool、double、QString、QStringList或者其他QVariant所支持的其他类型,其中包括了已经注册过的自定义类型。在本例中可以利用这一功能实现了编译器的设置(如代码编辑框的显示样式)保存。由以上分析来看,本N语言的编译器从技术上可行。2.1.2 经济可行性经济可行性主要是从对项目的经济支出上进行分析评价的,一方面是支出的费用,包括编写这个编译器的成本,以及后期项目被人使用后会产生的效益。支出的费用主要是硬件的搭建及软件的搭建,硬件方面采用了hp 6450b,软件方面主要的系统是Ubuntu12.04 LTS以及Qt 5.0.2,从经济上分析可行。2.1.3 时间可行性根据本次毕业设计要求,时间可行性需要满足开发周期在从需求基本确定后到主要功能实现不超过三个月,根据分析本次毕业设计的需求,可以确定本例在时间上是可行的。2.2 系统的功能要求N语言编译器要求实现目标语言C语言的输出功能、显示编译结果功能、显示运行结果功能以及其他一些可以选择增加的如语法高亮功能、查找功能等。实现的具体功能模块如下:2.2.1 基本功能本部分列出的基本功能需要全部实现。(1) 目标语言C语言输出:要求对N语言编译后的C语言的输出是正确无误可正常编译的,输出的C语言需要具有C语言一般格式(.c),可被C语言编译器正常识别,正常读取,正常编译。对于中文关键字能进行有效的转换处理,对于中文输入法产生的全角符号需要进行正确的转换,使得目标程序正确无误。(2) 编译结果的显示:编译结果需要能够正常显示,通常为人类可直接读取的格式,对于本例,最好使用汉化的结果显示编译结果。对于正常编译,需要显示正常编译的信息;对于程序中存在语法问题或警告等错误时,需要能够进行正常的错误显示,标明错误出现的地方,使用户一目了然。(3) 运行结果的显示:如果编译的程序没有错误,程序需要能够显示正常的运行结果,如打印正确的输出,完成程序的所有功能。打印正确的输出可以借助外部程序如shell来显示。2.2.2 附加功能本部分列出的附加功能需要在实现以上基本功能的前提下选择实现。(1) 语法高亮:语法高亮要针对关键字进行相应的语法高亮,需要有不同的颜色来显示不同的语法类型。在此例中应该为标准关键字、一般关键字、注释、常量、宏等。由于N语言关键字为单个汉字,因此N语言的关键字可以不进行高亮显示。(2) 函数折叠:函数折叠需要完成一个函数的可折叠功能,以此满足一些长函数的编辑时的阅读需求。另外,需要完成的是其他的一些如很长的if子句的折叠功能。在此例中,折叠后需要行号能正常显示。(3) 自动完成:自动完成的功能需要在输入C语言的关键字时可以对可能的关键字进行提示以辅助输入。这一功能的必要性体现在语言的API扩展时能够让用户快捷高效地找到所需的东西,而省去了繁杂的记忆过程。(4) 重新排版:重新排版主要针对于标准C语言,能够完成一些内定的如“强制在括号前加空格”等排版功能,规范了代码格式,使得代码的阅读更加容易。(5) 撤销-重做:撤销-重做功能需要完成基本的撤销-重做功能,最少实现一步的撤销-重做功能,使用户在误删代码或者其他需求需要满足的条件下进行基本使用。(6) 复制-剪切-粘贴:复制-剪切-粘贴三个功能需要能正常利用剪切板进行代码的复制-剪切-粘贴,位置要正确无误,内容需要正确无误。(7) 行号显示:行号的显示需要和代码行一一对应,不出现错行漏行等错误,在函数折叠时需要正常显示。(8) 函数列表:在C语言编辑的时候需要能够正确显示程序中所出现的所有函数,顺序需要正确,能够正常显示。(9) 界面风格:界面风格在本例中主要指一些编辑界面颜色的变换,能根据用户选择改变程序字体显示,能选择程序内置的几种配色方案进行正常的代码风格变换。(10) 查找/查找-替换:查找/查找-替换功能需要完成第一是查找功能的正常实现,在用户输入所需要查找的内容后能在代码中正确地突出显示这些内容,点击“下一个”按钮时能够正常对下一个符合输入字符的内容进行突出显示;第二要求替换功能的实现,在用户输入需要进行替换的内容和替换后的内容后能够一一在正确的位置进行替换,在点击“全部替换”按钮后需要能够进行正常的全部替换。(11) 快捷键:在完成以上功能后需要对以上功能加入快捷键,快捷键尽量以符合一般用户使用习惯的快捷键进行定义和实现,如保存文件需要用“Ctrl+S”,编译用“F5”,复制用“Ctrl+C”等,程序能够最大程度地满足不同平台移植的需要,尽量能够在如MAC上使用其通用快捷键如保存文件的“Command+S”,编译的“F5”,复制的“Command+C”等。2.3 系统的性能要求2.3.1可靠性要求编译器在ubuntu 12.04 LTS,Qt 5.0.2(32 bit)环境下需要测试通过,能顺利地完成N语言的编译功能,对于N语言的语法错误等需要在编译时正常显示,能正确启动shell显示正确的运行结果。程序的辅助功能如“语法高亮”、“复制”、“剪切”、“粘贴”、“行号显示”等功能能正常完成,“函数折叠”、“函数列表”等功能需要基本能用。然后在此环境下要求运行良好,不出现系统崩溃等状况。2.3.2时间要求编译器的启动时间需要控制在可接受的范围内,通常以不会影响用户的正常使用为准线。编译过程需要在目标语言C语言输出后,依靠tcc/gcc执行时间,通常状况下在用户编写的程序不复杂时,时间应控制在可接受范围内。在N语言向目标语言转换的过程中花费的时间需要控制在可以接受的范围内。2.3.3稳定性要求此系统需要运行良好,顺利地完成需求定义的功能,不出现崩溃甚至死机等状况。403 关键技术3.1 Qt 概述Qt是一个跨平台的C+应用程序开发框架。Qt被广泛应用于开发GUI程序,因此其在此种情况下会被称为部件工具箱。Qt还可被应用于非GUI程序,如控制台工具、服务器等。Qt是Digia公司的产品,使用了标准的C+和特殊的代码生成扩展(元对象编译器)(Meta Object Compiler,moc),还有一些宏。通过一种语言绑定,其他的编程语言也可以使用Qt。Qt还是一种自由的、开放源代码的软件,它是在GNU宽通通用许可证条款下发布的。Qt的所有版本都支持广泛的编译器,其中包括GCC的C+编译器、Visual Studio等。Qt经过了许多年的发展,不但有了完善的C+图形库,还在近年的版本中逐渐集成了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库等,其核心库也加入了进程间通信、多线程等模块,极大地丰富了Qt开发的大规模复杂跨平台应用程序能力,真正意义上实现了其研发宗旨:“Code Less,Create more;Deploy Anywhere.”。由于各家的编译器功不一,水平良莠不齐,Qt为了跨平台的兼容性,只能以“最低兼容规格”来设计。因此,Qt必须有RTTI、动态创建、Persistence/Serialization的基础建设,以及建构出自己的容器组件。3.2 Qt模块Qt提供的一般软件开发的模块有:(1) QtCore-QtCore模块。这是所有基于Qt的应用程序基础,它提供了信号与槽对象间的通信机制、IO。事件和对象的处理、多线程等功能。(2) QtGui。它包含了开发图形用户界面应用程序所需的功能。使用其支持的各个平台的原生图形API。它还支持反锯齿和矢量形变。还支持ARGB顶层widget。(3) QtMultimedia。它提供了用于多媒体内容处理的QML类型集和C+类集。同时提供了访问摄像头以及音频功能的API。它包含的Qt音频引擎支持三维的音频回放和管理。(4) QtNetwork。它提供了网络程序设计的功能。支持很多的通用协议如HTTP、FTP和DNS。还有对异步HTTP1.1的支持,还有较底层的TCP/IP和UDP协议,如QTcpSocket、QTcpServer和QUdpSocket。(5) QtOpenGL。它提供在应用程序中使用OpenGL和OpenGL ES加入了3D图形。在Windows平台上,它还支持Direct3D。(6) QtOpenVG。它提供OpenVG绘图支持的一个插件。(7) QtScript。它包含完全集成的ECMA标准脚本引擎、提供信号与槽机制,简化了对象间通信和QtScript调试器。(8) QtScriptTools,它是一个额外的Qt Script组件(9) QtSql,它将数据库集成至应用程序。支持所有主要的数据库驱动包括ODBC、MySQL、PSQL、SQLite、ibase、Oracle、Sybase、DB2。(10) QtSvg,它支持SVG格式(11) QtWebKit,它集成了WebKit,提供了HTML浏览器引擎,便于在原生应用程序中嵌入网络内容和服务。(12) QtXml,它提供了XML文档的阅读器还有编写器、支持SAX和DOM。(13) QtXmlPatternsl,它提供了XQuery和XPath的引擎支持。(14) Phonon,它集成了Phonon,支持跨平台应用程序播放音频和视频内容。但是从Qt5开始不支持Phonon。(15) Qt3Support,这个模块提供兼容Qt 3.版本的程序库(16) QtDeclarative, 一个能让QML界面流畅building的引擎。作业于Qt附带工具的模块:(1)QtDesigner,这是一个提供扩充Qt Designer的类型。(2)QtUiTools(3)QtHelp,它协助集成在线文件到应用程序中。(4)QtTest,它提供单元测试框架和鼠标和键盘模拟功能。集成Visual Studio和KDevelop。Qt提供的用于Unix开发的模块:QtDBus。Qt提供的用于Windows开发的模块:QAxContainer;QAxServer。3.3 Qt图形用户界面Qt的图形用户界面的基础是QWidget。Qt中所有类型的GUI组件,如按钮、标签、工具栏等都派生自QWidget,而QWidget本身则是QObject的子类。Widget负责接收鼠标、键盘还有来自窗口系统的其他事件,并描绘了自身在屏幕上的显示。每一个GUI组件都是一个widget,widget还可以作为容器,在其中还包含其他的Widget。QWidget不是一个抽象类型。它可以被放置在一个已经存在的用户界面中;若是Widget没有指定父Widget,当它显示时,它就是一个独立的视窗、或是一个顶层widget。QWidget显示能力包含了透明化及Double-Buffering。Qt提供一种托管机制,当Widget在创建时指定父对象,就可把自己的生命周期交给上层对象管理,当上层对象被释放时,自己也会被释放。确保对象不再使用时都会被删除。3.4 Qt信号与槽机制Qt利用信号与槽(signals/slots)机制取代传统的callback来进行对象间的沟通。当操作事件发生时,对象会发提交一个信号(signal);而槽(slot)则是一个函数接受特定信号并且运行槽本身设置的动作。信号与槽之间,则通过QObject的静态方法:connect来链接。信号在任何运行点上皆可发射,甚至可以在槽里再发射另一个信号,信号与槽的链接不限定为一对一的链接,一个信号可以链接到多个槽或多个信号链接到同一个槽,甚至信号也可连接到信号。以往的callback缺乏类型安全,在调用处理函数时,无法确定是传递正确型态的参数。但信号和其接受的槽之间传递的数据型态必须要相符合,否则编译器会提出警告。信号和槽可接受任何数量、任何型态的参数,所以信号与槽机制是完全类型安全的。信号与槽机制也确保了低耦合性,发送信号的类型并不知道是哪个槽会接受,也就是说一个信号可以调用所有可用的槽。此机制会确保当在连接信号和槽时,槽会接受信号的参数并且正确运行。3.5 布局管理布局管理类型是用于描述一个应用程序的用户界面中的Widget是如何放置的。当视窗缩放时,布局管理器会自动调整widget的大小、位置或是字号,确保他们相对的排列和用户界面整体仍然保有可用性。Qt内置的布局管理类型有:QHBoxLayout、QVBoxLayout、QGridLayout和QFormLayout。这些类型继承自QLayout,但QLayout非继承自QWidget而是直接源于QObject。他们负责widget的几何管理。想要创建更复杂的版面配置,可以继承QLayout来自定义版面配置管理。QHBoxLayout:配置widget成横向一列;QVBoxLayout:配置widget成垂直一行;QGridLayout:在平面网格中配置widget ;QFormLayout:配置widget用于两栏标签-:field。3.6 Main WindowQt提供了下列主视窗管理和相关的用户界面组件的类型:(1)QMainWindow:它提供了一个标准的应用程序主视窗。当中可以包括菜单、工具栏、状态栏、中央窗口部件等组件。本例中编译器的主界面MainWindow继承了QMainWindow这一个类,在中央窗口部件中实现了代码编辑的主要功能,在工具栏放置了一系列的图标进行编译器的一些辅助功能的实现,在状态栏显示了当前打开的文件名称、目录、光标所在行和代码总共的行数三项,在鼠标指针悬在相应功能图标的上方时,状态栏会显示相应自定义的提示信息。在创建这些功能时用到了QAction,先创建QAction,然后将其添加进功能的列表进行这些辅助功能的实现。QMainWindow如图3-1所示。图 3-1 QmainWindow结构(2)QDockWidget:它提供了一个可用于创建弹簧工具调色板或辅助窗口的widget。Dock widgets可以移、关闭、浮动为外部视窗。本例中,查找/查找-替换功能利用了QDockWidget,实现了相应功能。(3)QToolBar:提供了一个通用的工具栏widget,可以放入一些不同的action有关的工具,如按钮、下拉列表、comboboxes和spin boxes。本例中的工具栏就是通过QToolBar实现的。3.7 Graphics ViewGraphics View提供了用于管理和交互大量定制的2D图形对象的平面以及可视化显示对象的视图widget,并支持缩放和旋转功能。整个Graphics View框架提供一个以Item为基础的model-view设计。由3个主要类型组成,分别是QGrphicsItem、QGraphicsScene和QGraphicsView。若干View可以显示一个Scene,Scene中则包含几个不同几何形状的Item。该框架包括一个事件传播的架构,可以让在Scene上的Item有双精度的交互能力。Item能处理键盘事件,鼠标按下、移动、释放和双击的事件,他们也可以跟踪鼠标的移动。Graphics View使用的BSP(二进制空间划分)树可非常快速地找到Item,因此即使是包含百万个Item的大型Scene,也能进行实时图形化显示。KDE中的Plasma也是基于Graphics View实现的。3.8 Qt元对象系统Qt采用了一种机制使得它对C+进行了扩展,并使用了这种机制创建了独立的软件组件。这些组件能够绑定在一起,但是其中的任何一个组件对于它所要连接的组件的情况事先都一无所知。这种机制就被称作“元对象系统”(meta-object system),它提供了两项关键技术:信号-槽(参见四、Qt信号与槽机制)已经内省(introspection)。内省功能对于信号和槽的实现是必须的,还允许开发人员在运行时获得有关QObject子类的“元信息”(meta-information),这个元信息包括了一个含有对象的类名还有它所支持的信号和槽的列表。这一机制也支持属性和文本翻译,并对QtScript模块打下基础。标准的C+没有对Qt元对象系统所需的动态元信息提供支持。因此Qt提供了一个独立的moc工具来解决这一问题。Moc解析Q_OBJECT类的定义并且通过C+函数来提供可供使用的信息。Moc使用了C+实现,因此Qt的元对象系统可以在任意C+编译器上工作。它的工作原理如下:Q_OBJECT宏声明了每个QObject子类中必须实现的一些内省函数:metaObject()、tr()、qt_metacall()以及其他的一些函数。Qt的moc工具生成了用于由Q_OBJECT声明的所有函数和所有信号的实现。Connect()和disconnect()这样的Q_OBJECT的成员函数使用这些内省函数完成他们的工作。4 概要设计4.1 系统总体结构本系统在设计时基本分为两个部分。第一部分是设计一门自定义编程语言N语言,第二部分是实现N语言的编译功能。N语言,是根据C语言基本语法等实现的一门汉语编程语言,将其关键字进行单个汉字替换,简化了编程过程。C语言编译部分采用了计算机自带的gcc/tcc进行C语言的编译,完成编译过程。汉语编程的意义相对来说还是比较重要的。汉语编程能使得许多没有英语基础的人也能很好地掌握编程方法、编程思想,能使得更多的人参与到编程这一意义深远的事件中来。汉语编程能使一个人在掌握一门外语之前就掌握逻辑分析思维方法,让计算机的原理等被更多的人熟知。汉语编程更符合中国人的习惯,使它更容易被中国人接受。于此同时,C语言的保留关键字也得到了保留,使人们在用汉语编程的同时可以继续利用C语言的关键字进行编程,更加符合用户习惯,也促使了汉语母语编程人员更快地向国际化发展。N语言的编译器界面主要采用Qt搭建,利用Qt强大的可视化和丰富的内置类,将编译器界面和功能的实现变得简单高效。4.2 N语言的定义N语言是一种基于C语言的中文编程语言。在世界最经久不衰的C语言基础上增加了汉语编程功能。N语言是一个简单的自定义语言,除了替换关键字,其他方面和C语言没有太大区别,优点就是有利于编程的输入控制和对语言的了解。汉语的优点就在于它的简洁明了,能用一个单字将英文字符中表音的一长串字母简化,在输入的时候优点非常明显。作为已经发展了这么多年的表意字,汉语的优点是被全世界承认的。在二进制下,逐渐有了机器码,慢慢地演变成了汇编语言,接下来又出现了许多其他语言。C的产生虽然比较早,但由于它能操纵底层的特性,在现在仍然有着举足轻重的地位。汉语编程的优势还在于文化方面的优势。据说,当时莱布尼茨二进制的发明就是受到了阴阳思想的启发。布维是一位汉学大师,他对中国的介绍是17、18世纪欧洲学界中国热最重要的原因之一。布维是莱布尼茨的好友,一直与他保持着频繁的书信往来。莱布尼茨曾将很多布维的文章翻译成德文,发表刊行。正是布维向莱布尼茨介绍了周易和八卦的系统,并说明了周易在中国文化中的权威地位。八卦是由八个符号组构成的占卜系统,而这些符号分为连续的与间断的横线两种。这两个后来被称为“阴”、“阳”的符号,在莱布尼茨眼中,就是他的二进制的中国翻版,但实际莱布尼茨是受中国阴阳太极影响,只不过他付出了诸多研究,推演出二进制。他感到这个来自古老中国文化的符号系统与他的二进制之间的关系实在太明显了,因此断言:二进制乃是具有世界普遍性的、最完美的逻辑语言。4.3 C语言编辑器在确定了自定义语言N语言是由C语言转化之后,首先要做的就是完成一个C语言的编辑器。本毕业设计在系统内直接选择集成了tcc或者gcc编译器,将C语言进行编译。编辑器(Compiler for N)是由linux下的Qt实现的。Qt的主要技术已在上一章节中阐明,优秀的图形编辑使得本编辑器的实现变得较为简单。首先在memorystruct头文件中定义了语法行首指针、词法分析、函数列表、参数表、行号表、补全表的结构。MemoryCenter类声明了用于实现语法管理的指针和方法。memoryprivate.cpp和memorypublic.cpp文件中实现了上述方法。TextBlockData类中定义并实现了函数代码块的判断。SyntaxHighlighter继承于Qt的QSyntaxHighlighter类,主要实现了关键字的高亮。Cpadpalette定义了几种预置样式,能快速地选择相应的样式实现编辑环境的配色。CodeEditor继承于Qt的QPlainTextEdit类,是编辑器的主要编辑区域。编辑器的主要面板是在CenterWidget中实现的,它实现了编辑器的主要功能。AutoComple类主要实现了自动补全的功能,对于很多第一次编程或者对英语不熟的人,在试着将关键字写为英语单词时这个功能就发挥了很大用处。CompileConfig主要是一些关于编译设置的内容。其中定义了编译时的编译器选择(tcc/gcc)、创建文件、保存文件内容、打开控制台等方法,实现了编译的过程。FindReplaceArea定义了查找和替换的实现。FunctionFoldArea主要实现了函数块的折叠和显示。FunctionListArea实现了函数列表的展示。LineNumberArea实现了行号的显示,方便代码的阅读。RecomposeDialog实现了代码的重排版,让代码更加规范
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025甘肃省白银有色集团股份有限公司校园招聘225人笔试历年参考题库附带答案详解
- 2025春季首都机场集团校园招聘模拟试卷及答案详解(全优)
- 2025金华市天禾实业有限公司招聘2人考前自测高频考点模拟试题及答案详解一套
- 2025届春季东华公司校园招聘考前自测高频考点模拟试题及完整答案详解一套
- 2025年6月临沂高新控股集团有限公司三级子公司公开招聘管理人员笔试历年参考题库附带答案详解
- 2025年春季浙江省特种设备科学研究院招聘55人模拟试卷及答案详解(名师系列)
- 2025年春季中国邮政储蓄银行上海分行校园招聘模拟试卷及答案详解(网校专用)
- 2025贵州省自然资源厅直属事业单位第十三届贵州人才博览会引才8人模拟试卷附答案详解
- 2025年甘肃省平凉市泾川县丰台镇考聘大学生村文书考前自测高频考点模拟试题参考答案详解
- 2025黑龙江鸡西市博物馆现公益性岗位招聘2人考前自测高频考点模拟试题有答案详解
- 急诊科急危重症患者院内安全转运的流程
- 小学各年级感受快乐小学生幸福快乐的秘密主题班会
- 高血压的中医食疗与养生
- 中医体质量表
- 明清传奇小说
- 荐五年级上册第三单元习作猎人海力布故事缩写两个基本方法
- 初中生物学教材解读人教八年级上册生物圈中的其他生物江艾佳细菌八年级上册生物
- GA 1809-2022城市供水系统反恐怖防范要求
- 2022年全国工会财务知识大赛参考题库精简600题(含各题型)
- GB/T 2072-2007镍及镍合金带材
- GB/T 13460-2016再生橡胶通用规范
评论
0/150
提交评论