基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx

上传人:枫** 文档编号:544067839 上传时间:2023-03-12 格式:DOCX 页数:55 大小:1.20MB
返回 下载 相关 举报
基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx_第1页
第1页 / 共55页
基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx_第2页
第2页 / 共55页
基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx_第3页
第3页 / 共55页
基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx_第4页
第4页 / 共55页
基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx》由会员分享,可在线阅读,更多相关《基于GUI的交互式编译系统之中间代码生成器的设计与实现毕业论文设计.docx(55页珍藏版)》请在金锄头文库上搜索。

1、 基于GUI的交互式编译系统之中间代码生成器的设计与实现基于GUI的交互式编译系统之中间代码生成器的设计与实现摘要本设计实现了一个编译器前端,它将一个用C语言的子语言编写的源程序翻译成中间代码。词法分析器、语法分析器、中间代码生成器均是采用C+语言手动书写完成,未采用自动生成器,GUI采用Win32 API实现以保证轻快的运行速度及良好的系统性能,编辑控件采用Scintilla。词法分析器采用确定有限自动机实现,语法分析器是一个递归下降分析器,中间代码生成器输出的中间代码以四元式形式表示。本设计实现的编译器前端,运行在Windows平台下,Windows系统版本为Windows XP、Wind

2、ows 7或更高版本。本设计提供了一个可工作的界面友好的编译器前端,可以用来理解编译原理及解释怎样用一种语言如C+实现编译器前端,以供学习和教学所用。关键词:编译器前端;GUI;C+Design & Implementation of Intermediate Code Generator of Interactive Compilation System Based GUIAbstractThis final project implements a compiler front-end, it translates source programs written in a subset o

3、f the C language into intermediate code. The lexer、parser and intermediate code generator are all hand-written in C+, no auto lexer or parser are used, GUI is implemented in Win32 API for fast running speed and high performance, and edit control uses Scintilla. The lexer is implemented in Determinis

4、tic finite automata, the parser is a recursive-descent parser, the intermediate codes are represented in quadruple。The compiler front-end runs on the Windows platform, Windows system version is Windows XP, Windows 7 or later. This project provide a working and user interface friendly compiler front-

5、end, which can be used to demonstrate compiler principle and how compilers can be implemented in a language such as C+, for learning and teaching.Keywords: compiler front-end; GUI; C+目录1 绪论12 基本原理32.1 词法分析42.1.1 词法分析结果42.1.2 确定有限自动机52.2 语法分析52.2.1 递归下降分析法62.2.2 运算符的优先级82.3 中间代码生成92.3.1 四元式92.3.2 四元式

6、的常见结构102.4 符号表142.4.1 作用域152.4.2 局部变量名的存储布局163 设计与实现173.1 C子语言173.1.1数据类型173.1.2 字面值173.1.3 表达式173.1.4 语句183.1.5 函数183.2 符号表193.3 词法分析器243.4 语法分析器263.5 中间代码生成器283.6 GUI304 测试36总结41参考文献42致谢43附录 源程序44附件1:开题报告(文献综述)附件2:译文及原文影印件1 绪论很少有人去自己编写或修改编译器,那么为什么要去实现编译器前端呢?很重要的一点就是,理解计算机程序怎样被编译以及执行,可以帮助任何程序员理解他们写

7、的代码是怎样驱动计算机的,从而帮助他们写出更快、更高效的程序。编译原理经过多年发展已日趋成熟,然而现代很多跟编译原理相关的教材,内容陈旧落后,比如以Fortran或Pascal等过时语言为例进行分析讲解,或者全书充满晦涩难懂的定理公式,不能以直观的方式进行阐述,致使学生望而生畏。本设计用C+语言实现了一个编译器前端,它将一个用C子语言编写的源程序翻译成中间代码,拥有友好直观的交互式图形界面,有助于对编译原理的理解,可用于学习及教学。在一段程序可以执行之前,首先需要把它翻译成一种其能够被计算机接受的形式,完成这项翻译工作的程序称为编译器(compiler)1。简单而言,编译器是一个程序,它将使用

8、源语言编写的程序转换成另一种目标语言。在转换阶段很重要的一部分是报告用户当前源程序的错误。为了将源程序从一种语言翻译成另一种语言,编译器必须首先把程序的各种成分拆开,并搞清其结构和含义,然后再把这些成分组合成有意义的计算机能识别的语言。编译器的前端进行词法分析、语法分析和语义分析,并且产生中间代码,即进行分析。编译器的后端对中间代码进行优化并将中间代码翻译成机器语言,即进行组合。词法分析的任务是:对源程序进行从左到右逐个字符地扫描,产生一个个独立的单词符号(token)。词法分析是编译的基础。语法分析的任务是:在词法分析识别出一系列单词符号的基础上,分析并判定源程序的结构是否符合语法规则。语法

9、分析可以粗略地分为两类,一类是自顶向下,一类是自底向上2。对于本设计,采用的是自顶向下进行分析。语法分析得到语法树,尽管可以直接将语法树转换成目标机器代码,但这样做不利于可移植性和模块化设计。假设需要这样一个编译器:它可以编译N种不同的源语言,然后为M台不同的目标机生成代码。理论上,这是N*M个编译器,如图1.1(a),但实现这么多的编译器是需要花费大量的人力物力。中间代码(intermediate code, IC)是一种抽象机器语言,它可以表示目标机的操作而不需太多涉及与机器相关的细节,而且,它也独立于源语言的细节3。一个可移植的编译器如图1.1(b)所示,它先将源语言转换成中间代码,然后

10、再将中间代码转化成目标机器语言,这样便只需要实现N个前端和M个后端。这种实现要更容易合理些。即使在只需实现一个前端和一个后端的情况下,好的中间代码也利于将系统模块化,使得编译器前端不会因机器相关的细节而复杂化,编译器后端不会因源语言的特殊信息而干扰。编译器可以使用的中间代码有多种形式,对于本设计,采用简单的四元式。IC (a) (b)图1.1 面向5种语言并支持4种目标机的编译器:(a)没有IC,(b)有IC编译器的每个阶段都可能遇到错误,如果编译器在遇到第一个错误时就停止运行,对于修正程序肯定起不到多大帮助作用。词法分析阶段可以检测出来自输入的字符串不能形成语言的任何单词符号(token)。

11、语法分析阶段可以检测出违反语言语法的单词符号串。本设计可以报告出错误是什么及错误在源程序的行号和列号。2 基本原理一个编译器是一个计算机程序,它可以把用某种高级语言写的源代码转换成另一种形式,典型的形式是机器码。机器码是计算机可以执行的一系列指令4。int max(int a, int b)if(a b)return a;return b;一个编译器由有两部分组成,如图2.1所示。(1)源代码分析器:它将输入的源代码看作是一个字符串,然后将其翻译成有意义的符号(变量,值,操作符等)。(2)目标代码生成器:它将源代码分析器的结果转换成可执行代码。t1 = -ct2 = b * t1t3 = t1

12、 + t2t4 = t3目标代码源代码目标代码生成器源代码分析器图2.1 编译器结构源代码分析器不依赖于机器,然而目标代码生成器需要针对不同的机器类型生成不同的代码,因此是依赖于机器的。源代码分析器经常被称作编译器的前端,目标代码生成器被称作后端。本设计要实现的正是编译器的前端。编译器的前端又分为三个阶段,如图2.2所示。t1 = -ct2 = b * t1t3 = t1 + t2t4 = t3前端源代码中间代码生成器语法分析器词法分析器图2.2 编译器前端2.1 词法分析词法分析器以字符流作为输入,删除单词之间的空白符和注释(程序中每一部分都有可能出现空白和注释)并生成一系列的名字、关键字和

13、标点符号。如果让语法分析器来处理它们就会使得语法分析过于复杂,结构也不清晰,这便是将词法分析成为一个独立阶段,从语法分析中分离出去的主要原因5。在词法分析器中,词法单元(token)通常包含以下几种类型: 标识符 保留字(如:“if”,“while”等) 数值常量(如:整数,实数等) 字符串常量 简单符号(运算符如:“+”,“-”等,分隔符如:“;”,“,”等) 多重符号(运算符如“+=”,“+”等)这些词法单元将用于下一阶段语法分析。2.1.1 词法分析结果对于下面一段程序:int match(char* str)/ find a zeroif(!strncmp(str, “0”, 1)re

14、turn 0;词法分析器将产生如下tokens:INTID(match)LPARENCHARSTARID(str) RPARENLBRACEIFLPARENBANGID(strncmp) LPAREN ID(str) COMMA STRING(0) COMMANUM(1)RPAREN RPAREN RETURN REAL(0)SEMIRBRACEOF2.1.2 确定有限自动机确定有限自动机可用来实现词法分析器。有限自动机包括一个有限状态集合和一些从一个状态通往另一状态的边,每条边上标有一个符号;其中一个状态是初态,某些状态是终态6。图2.3给出了几个有限自动机的例子。if312IFa-z0-910-92120-9IDNUM图2.3 词法单词的有限自动机在确定有限自动机中,不会有从同一状态发出的两条边标记有相同的符号,确定有限自动机以如下方式接受或拒绝一个字符串:从初始状态出发,对于输入串中的每个字符,自动机都将沿着一条确定的边到达另一状态,这条边必须是标有输入字符的边,对n个字符的字符串进行了n次状态转换后,如果自动机到达了一个终态,自动机将接受该字符串,若到达的不是终态,或者找不到与输入字符相匹配的边,那么自动机将拒绝接受该字符串7。2.2 语法分析语法分析是分析如何根据一个文法生成一个终结符号串的过程。一种语言的识别器是一个程序,它把输

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 商业合同/协议

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号