ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:1MB ,
资源ID:687763      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/687763.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于gui的交互式编译系统之中间代码生成器的设计与实现毕业论文设计正文终稿.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

2、示。本设计实现的编译器前端,运行在 Windows平台下,Windows 系统版本为Windows XP、Windows 7 或更高版本。本设计提供了一个可工作的界面友好的编译器前端,可以用来理解编译原理及解释怎样用一种语言如 C+实现编译器前端,以供学习和教学所用。关键词:编译器前端;GUI;C+Design&Implementation of Intermediate Code Generator of Interactive Compilation System Based GUI Abstract This final project implements a compiler fro

3、nt-end,it translates source programs written in a subset of 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

4、uses Scintilla.The lexer is implemented in Deterministic 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 wor

5、king and user interface friendly compiler front-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:开题报告(文献综述)附件 2:译文及原文影印件 1 绪论绪论 很少有人去自己编写或修改编译器,那么为什么要去实现编译器前端呢?很重要的一点

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

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

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

9、立于源语言的细节3。一个可移植的编译器如图 1.1(b)所示,它先将源语言转换成中间代码,然后再将中间代码转化成目标机器语言,这样便只需要实现 N个前端和 M 个后端。这种实现要更容易合理些。即使在只需实现一个前端和一个后端的情况下,好的中间代码也利于将系统模块化,使得编译器前端不会因机器相关的细节而复杂化,编译器后端不会因源语言的特殊信息而干扰。编译器可以使用的中间代码有多种形式,对于本设计,采用简单的四元式。IC (a)(b)图 1.1 面向 5种语言并支持 4 种目标机的编译器:(a)没有 IC,(b)有 IC 编译器的每个阶段都可能遇到错误,如果编译器在遇到第一个错误时就停止运行,对于

10、修正程序肯定起不到多大帮助作用。词法分析阶段可以检测出来自输入的字符串不能形成语言的任何单词符号(token)。语法分析阶段可以检测出违反语言语法的单词符号串。本设计可以报告出错误是什么及错误在源程序的行号和列号。2 基本原理基本原理 一个编译器是一个计算机程序,它可以把用某种高级语言写的源代码转换成另一种形式,典型的形式是机器码。机器码是计算机可以执行的一系列指令4。int max(int a,int b)if(a b)return a;return b;一个编译器由有两部分组成,如图 2.1所示。(1)源代码分析器:它将输入的源代码看作是一个字符串,然后将其翻译成有意义的符号(变量,值,操

11、作符等)。(2)目标代码生成器:它将源代码分析器的结果转换成可执行代码。图 2.1 编译器结构 源代码分析器不依赖于机器,然而目标代码生成器需要针对不同的机器类型生成不同的代码,因此是依赖于机器的。源代码分析器经常被称作编译器的前端,目标代码生成器被称作后端。本设计要实现的正是编译器的前端。编译器的前端又分为三个阶段,如图 2.2所示。图 2.2 编译器前端 2.1 词法分析 词法分析器以字符流作为输入,删除单词之间的空白符和注释(程序中每一部分都有可能出现空白和注释)并生成一系列的名字、关键字和标点符号。如果让语法分 析器来处理它们就会使得语法分析过于复杂,结构也不清晰,这便是将词法分析成为

12、一个独立阶段,从语法分析中分离出去的主要原因5。在词法分析器中,词法单元(token)通常包含以下几种类型:标识符 保留字(如:“if”,“while”等)数值常量(如:整数,实数等)字符串常量 简单符号(运算符如:“+”,“-”等,分隔符如:“;”,“,”等)多重符号(运算符如“+=”,“+”等)这些词法单元将用于下一阶段语法分析。2.1.1 词法分析结果词法分析结果 对于下面一段程序:int match(char*str)/find a zero if(!strncmp(str,“0”,1)return 0;词法分析器将产生如下 tokens:INT ID(match)LPAREN CHA

13、R STAR ID(str)RPAREN LBRACE IF LPAREN BANG ID(strncmp)LPAREN ID(str)COMMA STRING(0)COMMA NUM(1)RPAREN RPAREN RETURN REAL(0)SEMI RBRAC EOF 2.1.2 确定有限自动机确定有限自动机 确定有限自动机可用来实现词法分析器。有限自动机包括一个有限状态集合和一些从一个状态通往另一状态的边,每条边上标有一个符号;其中一个状态是初态,某些状态是终态6。图 2.3 给出了几个有限自动机的例子。i f IF a-z 0-9 0-9 0-9 ID NUM 图 2.3 词法单词的

14、有限自动机 在确定有限自动机中,不会有从同一状态发出的两条边标记有相同的符号,确定有限自动机以如下方式接受或拒绝一个字符串:从初始状态出发,对于输入串中的每个字符,自动机都将沿着一条确定的边到达另一状态,这条边必须是标有输入字符的边,对 n个字符的字符串进行了 n 次状态转换后,如果自动机到达了一个终态,自动机将接受该字符串,若到达的不是终态,或者找不到与输入字符相匹配的边,那么自动机将拒绝接受该字符串7。2.2 语法分析语法分析 语法分析是分析如何根据一个文法生成一个终结符号串的过程。一种语言的识别器是一个程序,它把输入看作一个字符串 x,如果 x 是该语言的一个句子,则回答是,否则回答否。

15、大多数分析方法都可以归为以下两类:自顶向下方法和自底向上方法。在自顶向下语法分析器中,构造过程从根结点开始,逐步向叶子节点方向进行,直至推出句子。自顶向下方法可以较容易地手工构造出高效的语法分析器。在自底向上语法分析器中,逐步对输入串进行归约,直至文法的开始符号,即从叶子节点开始,逐步向上归约,直至语法树的根节点。LL(1)文法表示对输入串从左到右扫描,进行最左推导,分析时每步向前查看一个字符。LL(1)分析法需要消除左递归和克服回溯。LR 分析法表示对输入串从左到右扫描,构造最右推导的逆过程。LR 分析法若采取手工构造,工作量非常大。本设计语法分析采用递归下降分析法。2.2.1 递归下降分析

16、法递归下降分析法 递归下降分析方法是一种不带回溯的自顶向下语法分析方法,它使用一组递归过程来处理输入。为文法的每个非终结符都创建一个相应的过程。递归下降分析法的一种简单形式是预测分析法。在预测分析法中,各个非终结符号对应的过程中的控制流可以由向前看符号无二义性地确定,在分析输入串时出现的过程调用序列隐式地定义了该输入串的一棵语法树8。假设用预测分析法分析以下文法(黑体字符序列被视为一个单元,也就是单个终结符号):stmt (expr;|if(expr)stmt|for(optExpr;optExpr;optExpr)stmt|other optExpr(|expr 则预测分析器如下所示:void stmt()switch(curToken)case expr:accept(expr);accept(;);break;case if:accept(if);accept();accept(expr);accept();stmt();break;case for:accept(for);accept();optExpr();accept(;);optExpr();accept(;)optEx

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1