资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
DO-WHILE循环语句翻译程序的设计目录概#11.1课程设计背景11.2课程设计目的11.3实验环境与开发工具11.4 C+语言简单介绍2第二章设计内容32.1设计需求陈述32.1.1词法分析的原理42.1.2语法分析器的原理52.1.3语义分析中间代码生成器的原理错误!未定义书签。2.2需要完成的功能错误!未定义书签。2.2.1判定输入的文法词法分析是否正确82.2.2判定输入的文法语法分析是否正确92.2.3中间代码(四元式)的生成与输山102.3分析器的构造11第三章逻辑设计123.1系统的组织与基本工作流程123.2总体结构逻辑结构图13第四章详细设计错误!未定义书签。4.1软件功能分析错误!未定义书签。4.1.1判定输入文法词法分析是否正确144.1.2判定输入的文法的语法分析是否正确错误!未定义书签。4.1.3语义分析和中间代码生成错误!未定义书签。第五章设计结果155.1设计结果输出错误!未定义书签。课程设计总结16献:16第一章概述1.1课程设计背景:编译原理是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重 要专业课程。该课程系统地介绍编译程序的结构、工作流程及编译程序各组成部分的设计原 理和实现技术。巾于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大:k的软 件设计算法,因此,一直是一门比较难学的课程。为了更好地理解和掌握编译技术的基本概 念、基本原理和实现方法,实践环节非常重要,只有通过上机进行程序设汁,才能对比较抽 象的教学内容产生具体的感性认识,增强综合分析问题、解决问题的能力,并对提高软件设 计水平大有益处。1.2设计目的:课程设计是学生学完本课程基础知识后的最后一个实践性教学环节。作为一项专业综合 能力训练,是本课程学习情况的总结与提高,是培养独立思考和科学工作方法,实现由学习 向应用过渡的重要环节。本次课程设计的主要目的如下:1、通过本次课程设计,企面系统的了解编译原理程序构造的一般原理和基本方法,尤其是 对词法分析,简单优先分析方法和语义分析中间代码生成的认识和理解;2、了解词法分析,语法分析,语义分析中间代码生成的基本过程加深对编译程序的深入理 解,提高对编译程序工作基本过程及各个阶段基本任务的分析技能:3、加强对编译程序的生成过程、构造工具及编译程序总流程框图的理解,巩固所学的课本 知识。4、掌握简单优先文法分析是如何根据语法规则逐一分析词法分析所得到的单词,检查语法 错误,即掌握语法分析过程;5、掌握词法分析的构造和简单算符优先文法分析器以及语义分析程序的设计和调试;6、掌握运用程序方法实现词法分析,简单优先文法分析和语义分析的方法;7、锻炼并增强程序设计的能力,提高自己的编程水平。1.3实验环境与开发工具:本门课程设计“DO-WHILE循环语句翻译程序的设计”的设计是以计算机为基础的,其开 发环境主要在两个方面,即硬件环境和软件环境。硬件环境是指你是川什么类型的服务器, 内存硬盘的限制等等。软件环境就是软件运行的环境,例如你的操作系统是什么,你要运行 的程序需要什么其他的软件支持什么的。我在试验过程中,所用计算机的软件设备和硬件指 标分别如下:一、硬件环境:处理器 Intel (R) Core (TM) i3 CPU 2.40GHz內存(RAM) 2G硬盘500G320M显卡二、软件环境:Windows 7 OSMicrosoft Visual C+6.01.4 C+语言C+类中包含私有、公有和保护成员C+类中可定义三种不同访M控制权限的成员。一种是私有(Private)成员,只有在类中说明的函数才能访问该类的私有成员,而在该类外的函数 不可以访问私有成员;另一种是公有(Public)成员,类外面也可访问公有成员,成为该类的 按口;还有一种是保护(Protected)成员,这种成员只有该类的派生类可以访问,其余的在这个类外不能访问。Microsoft Visual C+中ClassWizard (类向导)是Visual C+提供的强大的类处理工具。其中的Message Map(消息映射)选项卡可以让我们添加或删除要处理的 Windows消息处理器;Member Variable(成员变量)选项卡为应川程序巾的类创建成员变量,并和控件联系在一起;Class Info (类信息)选项卡显示了应用程序中所包含类的一般信息,包拈定义的头文件和源文件类名,以及与之相关联的基类。并且Add Class按钮提供了在工程中创建新类的方法。第二章设计内容2.1设计需求陈述输入一个DO-WHILE的语句,进行词法分析,词法分析器利用超前搜索,状态转换等方法,将 源程序转化成为一个一个的单词符号二元式,如果词法分析无误,则进入语法分析部分,使用 简单优先法进行文法分析,为每个终极符与非终极符之间定义优先关系,利用优先关系进行 移进-规约,如果能规约到文法的开始符,则文法分析成功,输出四元式.因为这样才能提高编 码的效率。2.1.1词法分析器的原理输入一个DO-WHILE的语句,进行词法分析,词法分析器利用超前搜索,状态转换等方 法,将源程序转化成为一个一个的单词符号二元式,如果词法分析无误,则进入语法分析部 分,(1)词法分析程序的功能是从左到右扫描源程序字符串,根据语言的词法规则 识别出各类单词符号,并以二元组(单词种别,单词自身值)的形式输出。(2)待分析的简单语言的词法关键字 do c=a+l while ab end 运算符 +-:= =; ( ) #(3)这个词法分析的所有的单词符号,以及它们的种别编码和内部值如下表单词符号种别编码助记符内码值DIM1$DIMIF2$IF-DO3$DO-STOP4$STOPEND5SEND标识符6$ID常数(整)7SINTlA)部字符串=8$ASSIGN标准二进形式+9$PLUS氺10$STAR氺*11SPOWER912$COMMA-(13$LPAR-)14$RPAR对于这个小语言,有儿点重要的限制:首先,所有的关键字(如IF、WHILE等)都是“保留字”。所谓的保留字的意思是,用 户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的IF (5) =x 。其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是 说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此 表叫作保留字表)。当转换阁识别出一个标识符时,就去查对这张表,确定它是否为一个关 键字。再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用 一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句TF i0 i= 1;而绝对不要写成TF i0 i=l;因为对于后者,我们的分析器将无条件地将TFT看成一 个标识符。这个词法分析的单词符号的状态转换阁,如下阁:(4)词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值) 例如输入如下一段: main ()int a=-5, b=4, jif(a=b)j=a-b;else j=b-a;二元式要求输出:(2, “main”)(5,“(”)(5,(5, ” “)(1, ” int”)(2,(4, v )(3,” -5”)(5,(2,” b”)(4, ” =”)(3,(5, ”,”)(2,” j”)(5,(1, ” if” )(5, ”(“)(2,(4, ”=”)(2, ” b” )(5,(2, ” j” )(4,”)(2,(4, ”)(2,” b”)(5,(1, ” else” )(2, ” j” )(4(2,” b”)(4, ”)(2,(5,”;”)(5,”,_a)” A V4)a”)a”)a”)2.1.1语法分析器原理本课程设计采用的是语法分析中用到的简单优先文法进行设计,简单优先文法是按照文 法符号(终结符和非终结符)的优先关系确定句柄的,即它按一定的文法的基本思想,对一 个文法按一定的原则求出该文法所有符号(包括终结符和非终结符)之间的优先关系按照这 种关系确定规约过程中的句柄,它的规约过程实际上是规范规约。简单优先分析法准确、规 范,但分析效率很低,实际使用价位不大。在文法的符号之间建立一种(实际是三种)优先关系RcVxV,在分析的过程中,利用优先 关系的比较,来确定前句型的句柄;在找到句柄后按相应的产生式归约之,并将归约出的VN符号压入栈,再进行新的比较,直 到出错或分析成功.(1) 设G是已化简的文法,s,teV,若G中存在规范句型a= .st.,则s,t与a的句柄之间的 关系必有下述情况之一ST.在图1中S在句柄中而T不在。图2中ST都不在句柄中。图3中T在句柄中而S不在。对 于上述情况我们规定图1:ST。图2: S=T;图3:ST;若一文法G的任何两个符号之间至多存在一种优先关系,且任意两个不同的产生式无相 同的右部,则称G为简单优先文法。文法优先关系是指文法符号之间的关系,包括=、*。1) S1=S2当且仅当G中有规则U:=-S1S2-;2) S1-S2当且仅当G中有规则U:=S1 A并使得A L+S2成立;根据关系乘积得到: Xi+k+l, Xi+k即为句柄的尾符号,然后 从Xi+k开始向左查看己扫描过的符号,直到发现Xi-ldo B while E, B-c:=a+l,E-ab属性文法描述G(s): S-do B while E, S.begin:=newlabel;B.next:=S.begin;E.truc:=ncwlabcl;E.false:= S.next;S.code:=gen(S.begin:)IIB.code IIE.code IIB-c:=a+lE-abE-trueE-false
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号