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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

毕业设计编译原理报告简单文法的编译器的设计与实现.docx

1、毕业设计编译原理报告简单文法的编译器的设计与实现提供全套毕业论文,各专业都有课 程 设 计 报 告 设计题目:简单文法的编译器的设计与实现班 级:计算机1206组长学号:20123966组长姓名:指导教师:设计时间:2014年12月 摘 要 编译原理是计算机科学与技术专业一门重要的专业课,它具有很强的理论性与实践性,目的是系统地向学生介绍编译系统的结构、工作原理以及编译程序各组成部分的设计原理和实现技术,在计算机本科教学中占有十分重要的地位。计算机语言之所以能由单一的机器语言发展到现今的数千种高级语言,就是因为有了编译技术。编译技术是计算机科学中发展得最迅速、最成熟的一个分支,它集中体现了计算

2、机发展的成果与精华。 本课设是词法分析、语法分析、语义分析的综合,外加上扩展任务中间代码的优化和目标代码的生成,主要是锻炼学生的逻辑思维能力,进一步理解编译原理的方法和步骤。关键词:编译原理,前端,目标代码,后端摘要.3 1. 概述.6 2. 课程设计任务及要求.8 2.1 设计任务.8 2.2 设计要求.9 3. 算法及数据结构.10 3.1算法的总体思想.10 3.2 词法分析器模块.11 3.2.1 功能.11 3.2.2 数据结构.11 3.2.3 算法.12 3.3 语法分析器模块.13 3.3.1功能.13 3.3.2 数据结构.13 3.3.3算法.14 3.4 中间代码产生器模

3、块.24 3.4.1 功能.24 3.4.2 数据结构.24 3.4.3 算法.25 3.5 优化器模块.27 3.5.1 功能.27 3.5.2 数据结构.27 3.5.3 算法.283.6 目标代码生成器模块.30 3.6.1功能.30 3.6.2 数据结构.30 3.6.3 算法.31 4. 程序设计与实现.32 4.1 程序流程图.32 4.2 程序说明.33 4.3 实验结果.355. 结论.426. 参考文献.437. 收获、体会和建议.44 1 概述 在计算机上执行一个高级语言程序一般要分为两步;第一步,用一个编译程序把高级语言翻译成机器语言程序;第二步,运行所得的机器语言程序求

4、得计算结果。在学习编译原理课程过程中,逐渐掌握各章节构造编译程序的基本理论,并能独立完成词法分析器、语法分析器和语义分析器实验,在基本实验完成的基础上,逐步完成课程设计。针对自己的理解和学习,实现一个小编译器括符号表的构造。 编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析和中间代码产生、优化、目标代码生成。 第一阶段,词法分析。词法分析的任务是:输入源程序,对构成源程序的字符串进行分解和扫描,识别出一个个的单词或符号。我们设计了符号表,包括名字栏和信息栏,其中名字栏作为关键字,根据给定的名字,在符号表中查找其信息。如果该名字在符号表中不存在,则将其加入到符号表中,否则返

5、回指向该名字的指针,从符号表中删除给定名字的表项,并且设计了词法分析器,具体实现为设计各单词的状态转换图,并为不同的单词设计种别码。将词法分析器设计成供语法分析器调用的子程序。词法分析器具备预处理功能。将不翻译的注释等符号先滤掉,只保留要翻译的符号串,即要求设计一个供词法分析调用的预处理子程序;,能够拼出语言中的各个单词,将拼出的标识符填入符号表,返回识别单词或符号的种别码和属性值。 第二阶段,语法分析。在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。通过语法分析,确定整个输入串是否构成语法上正确的“程序”。我们实现了语法分析器,能够使用预测分析法、递归下降分析法、算符

6、优先分析法、SLR分析法实现对表达式、各种说明语句、控制语句进行语法分析。 第三阶段,语义分析和中间代码产生。对语法分析所识别的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。这一阶段包括两个方面的工作。首先,对每种语法范畴进行静态语义检查。如果语义正确,则依循语言的语义规则进行中间代码的翻译。 第四阶段,优化。优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能产生出更为高效的目标代码。例如公共子表达式的提取、循环优化、删除无用代码。 第五阶段,目标代码生成,把中间代码变换成特定机器上的低级语言代码,有赖于硬件系统结构和机器指令含义来实现最后的翻译。在能完成指定寄存器个

7、数的情况下将一中间代码程序段翻译成汇编语言目标代码。 通过对编译器的设计实现,一方面再次熟悉了c语言的编程方法及思想,另一方面加深了而对所学编译知识的掌握和理解,也深刻的理解了编译器的思想和实现方法;从词法分析到语法分析,再到语义分析,整个独立而又紧密联系的环节,紧紧相扣,整体的实现理解的更加透彻。不过由于编译程序本身涉及到词法分析、语法分析、代码生成、错误恢复和优化等诸多模块,要在实验中做到面面俱到不太可能,所以本编译器不可避免的会存在各种问题,但作为一个具有基本功能的、可扩充的系统,完全达到了巩固编译原理的理论知识,并将其运用于实践的目的。 2 课程设计任务及要求2.1 设计任务任务内容:

8、定义一个简单程序设计语言文法(包括变量说明语句、算术运算表达式、赋值语句;扩展包括逻辑运算表达式、If语句、While语句等);扫描器设计实现;语法分析器设计实现;中间代码设计;中间代码生成器设计实现;中间代码优化;生成目标代码。 分析完任务内容,我们制定出一套满足老师要求的语句的文法结构,具体内容如下(其中“?”代表空产生式):程序-void main ()函数体函数体-变量声明语句 函数体|赋值语句 函数体|if(表达式)函数体else函数体函数体|while(表达式)函数体 函数体|?变量声明语句-类型 标识符 变量声明语句_1 ;类型-int |char |bool变量声明语句_1-,

9、标识符 变量声明语句_1 |=表达式 变量声明语句_1|?赋值语句-标识符=表达式;表达式-算数表达式 逻辑表达式逻辑表达式- =算数表达式|T E1E1-+ T E1|- T E1|?T-F T1T1-* F T1|/ F T1|?F-标识符常数|(E)这个文法满足老师的要求,但是也存在一些不足,比如变量类型中没有处理实数,数组和结构体以及if语句和while语句后必须有大括弧匹配。2.2 设计要求 1、在深入理解编译原理基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理;3、编程序实现系统,要求实现可视化的

10、运行界面,界面应清楚地反映出系统的运行结果;4、确定测试方案,选择测试用例,对系统进行测试;5、运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并回答指导教师的提问; 3 算法及数据结构 3.1 算法的总体思想 词法分析器又称为扫描器,它的任务就是对输入的源程序进行词法分析输出单词符号供语法分析使用,语法分析器简称分析器,对单词符号串进行语法分析,根据语法规则进行推导,识别出各类语法单位,最终判断输入串是否构成语法上正确的“程序”。语义分析与中间代码产生器,按照语义规则对语法分析器推导出的语法单位进行语义分析并把它们翻译成一定形式的中间代码。优化器就是对中间代码进行优化处理。目标

11、代码生成器,把中间代码翻译成目标程序。符号表用来登记源程序中出现的变量及其属性。另外,如果源程序有错误,编译发现错误,把有关错误信息报告给用户,即出错处理。流程图如下: 出 错 处 理 符 号 表 词法分析器 源程序 语法分析器 单词符号 优化器 语义分析及中间代码产生器 语法单位 目标代码生成器 中间代码 中间代码 目标代码3.2 词法分析器模块 3.2.1 功能 词法分析器功能室输入源程序,输出单词符号。单词符号是一个程序语言的基本语法符号。程序语言的单词符号一般可分为下列5种。 (1)关键字 是由程序语言定义的具有固定亿的标识符。有时称这些标识符为保留字或基本字。 (2)标识符 用来标示

12、各种名字,如变量名,数组名,函数名等。 (3)常数 程序中出现用来运算的数值 (4)运算符 我们所定义的文法包括+,-,*,/算术运算符,还有and,or,not,=,,四元式的个数 n 出口 y 以上为优化器的第一个模块,构造基本块内优化的DAG;出口之后是另外一个模块。该结点为带有附加标记的叶结点结构:B|A1,A2.按结点编码顺序,依次读取每一结点信息 入口有两个假设:临时变量的作用域是基本块内非临时变量的作用域也可以是基本块内。 结点为带有附加标记的非叶结点结构: n n A|A1,A2 结束i结点个数 生成A i=A(i=1,2,.)A i为非临时变量 生成四元式A=B C 生成四元

13、式A i = B (i=1,2,.)A i为非临时变量 y B|. C|. y n y n y 3.6 目标代码生成器模块 3.6.1 功能 编译模型的最后一个阶段是代码生成。它以源程序的中间代码作为输入,并产生等价的目标程序作为输出。代码生成器的输入包括中间代码和符号表的信息。代码生成是把语义分析后或优化后的中间代码换成目标代码。目标代码一般都有三种形式。(1) 能够立即执行的机器语言代码,所有地址均已定位。(2) 待装配的机器语言模块。当需要执行时,由连接装入程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码。(3) 汇编语言代码,尚需经过汇编程序汇编,转换成可执行的机器语言代码。 代码生成主要考虑两个问题:一是如何使生成的目标代码较短;另一是如何充分利用计算机的寄存器,减少目标代码中访问存储单元的次数。这两个问题都直接影响目标代码的执行速度。 再次说明一下,本次课设没有涉及基本块的划分。 3.6.2 数据结构 typedef struct CODE char *op;/汇编操作指令 char *op1;/第一操作数 char *op2;/第二操作数CODE;CODE Code1000;目标代码结构体数组char *R=NULL;/寄存器,里面放的是变量的名,就是一个描述表另外还有一个常用栈的描述。 开始 3.6.3 算法 释放寄存器

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

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