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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(FOR循环语句的翻译程序设计递归下降法输出三地址表示文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

FOR循环语句的翻译程序设计递归下降法输出三地址表示文档格式.docx

1、 6.4、主函数-13 7、测试方法和测试结果-14 7.1测试过程-14 7.2测试结论-16 8、课程设计总结-17 9、参考文献-18 本科生课程设计成绩评定表19课程设计任务书学生姓名: 王嘉辛 专业班级: 计算机0909班 指导教师: 高 曙 工作单位:计算机科学与技术学院 题目: FOR循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 写出符合给定的语法分析

2、方法的文法及属性文法。(2) 完成题目要求的中间代码三地址表示的描述。(3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。(5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参

3、考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名: 年 月 日系主任(或责任教师)签名:FOR循环语句的翻译程序设计 递归下降法、输出三地址表示1、系统描述1.1、实验思想通过设计、编制、调试一个FOR循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现词法分析程序对单词序列的词法检查和分析,并且实现对单词序列的语法分析、语义分析以及中间代码生成。1.2、设计内容

4、本设计按照要求设计出for语句的简单文法,并使用递归下降分析法对用户输入的程序进行分析和翻译。对下列正确的程序输入:for i=1 step 1 until 10 do k=j #结果程序要对该输入进行词法分析,然后利用递归下降的分析法对词法分析得到的单词序列进行语法分析,经过语法制导翻译显示出等价的三地址表示的中间代码。对于错误的程序输入,如:For i=1 step 1 until 10 k=j#结果程序要指出程序出错。1.3、翻译过程1.3.1、 词法分析:词法分析是计算机科学中将字符序列转换为单词(Token)序列的过程。进行语法分析的程序或者函数叫作词法分析器(Lexical ana

5、lyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。词法分析是编译过程中的第一个阶段,在语法分析前进行 。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。简化设计、改进编译效率、增加编译系统的可移植性。词法分析是编制一个读单词的过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。单词的分类主要分为五类:1. 关键字:由程序语言定义的具有固定意义的标识 符。也称为保留字或基本字。2. 标识符:用

6、来表示程序中各种名字的字符串。3. 常 数:常数的类型一般有整型、实型、布尔型、文字型。4. 运算符:如+、 、*、/ 等。5. 界限符:如逗号、分号、括号等。词法分析器输出的单词符号常表示成如下的二元式:(单词种别,单词符号的属性值)1.3.2、语法分析:语法分析是编译过程的一个逻辑阶段。语法分析的任务是在的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语法分析程序可以用YACC等工具自动生成。语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查语法错误,报告错误的性质和位置,并进行

7、适当的纠错工作。语法分析的主要工作:是识别由词法分析给出的单词序列是否是给定的正确句子(程序)。语法分析常用的方法:自顶向下的语法分析和自底向上的语法分析两大类。此次设计中语法分析中主要通过递归下降分析法对语法分析处理过程进行控制,使输出的三地址表示的翻译的工作有条不紊的进行,同时识别语法分析中的语法错误。递归下降法主要采用自顶向下方法,即从文法的开始符号开始进行分析,逐渐推导的往下构造语法树,使其树叶正好构造出所给定的源程序串。自顶向下方法的关键是确定在推导过程中选择候选式的问题。当进行推导时,一个非终结符可能对应多个产生式,这样我们就无法事先知道应该用哪个产生式,因此实用都作了一些限制。以

8、便在任何情况下都能确定应该用的产生式。自顶向下的主要思想是从开始符出发导出句型并一个符号一个符号地与给定终结符串进行匹配。如果全部匹配成功,则表示开始符号可推导出给定的终结符串。因此判定给定终结符号串是正确句子。词法分析程序和语法分析程序的关系:1.3.3、中间代码生成:中间代码,也称中间语言,是复杂性介于源程序语言和机器语言的一种表示形式。为了使编译程序有较高的目标程序质量,或要求从编译程序逻辑结构上把与机器无关和与机器有关的工作明显的分开来时,许多编译程序都采用了某种复杂性介于源程序语言和机器语言之间的中间语言。中间代码(语言)是一种特殊结构的语言,编译程序所使用的中间代码有多种形式。按其

9、结构分常见的有逆波兰式(后缀式)、三地址代码(三元式、四元式)和树形表示(抽象语法树)、DAG表示。本次课程设计要实现的是三地址表示。1.3.4、属性文法:对于文法的每个产生式都配备了一组属性的计算规则,称为语义规则。所谓语法制导的翻译指的是在语法分析过程中,完成这些语义规则描述的动作,从而实现语义处理。 一个属性文法包含一个上下文无关文法和一系列语义规则,这些语义规则附在文法的每个产生式上。形式上讲,属性文法是一个三元组 :A=(G,V,F), 其中:G:是一个上下文无关文法;V:有穷的属性集,每个属性与文法的一个终结符或非终结符相连,这些属性代表与文法符号相关信息;F:关于属性的属性断言或

10、一组属性的计算规则(称为语义规则) 。 断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。2、递归下降法递归下降法又称递归子程序法。在程序语言的语法定义中有许多采用递归定义。我们在对它进行语法分析时,编制的处理程序也采取递归的方式,可使其结构简单易读。但由于频繁地调用子程序大大地降低了分析速度。2.1、递归下降法的主要思想:对每个非终结符按其产生式结构写出相应语法分析子程序。因为文法递归相应子程序也递归,子程序的结构与产生式结构几乎一致。所以称此种方法称为递归子程序法或递归下降法。2.2、用程序表示递归子程序的内部结构: 设A是一个非终结符: A1 A2 A

11、n 则写(A) if charfirst(1 ) then(1 ) else if charfirst(2 ) then (2 ) else if charfirst(n ) then (n) else ERROR其中(i)表示调用处理符号串i的子程序。对A的任一右部i 设为: i = y1 y2 yn 则定义( i) begin(y1);(y2);(yn) end其中yj可分为下列两种情况(j=1,n):1) yjVT,则 ( yj) if char yj then ERROR else READ(char)2) yjVN,则(yj)表示调用关于yj的递归子程序。23、递归下降法对文法的限制

12、:1、任一非终结符B都不是左递归的,否则会产生死循环。2、对A的任意两个右部i , j ,有:first(i)first(j)= 。First(i)表示i所能导出串的第一个符号的集合。显然,每个i的first(i)是互不相同的,否则则无法判断应执行哪个(i )。3、三地址代码的表示:一般形式:x := y op z 如表达式x + y z 翻译成的三地址代码序列是: t1 := y z t2 := x + t1 常用的三地址表示:赋值语句 x := y op z, x := op y, x := y 无条件转移 goto L条件转移 if x relop y goto L过程调用 param

13、x 和call p , n过程返回 return y索引赋值 x := yi和 xi :地址和指针赋值 x := &y,x := y和x := y三元式结构形式: 编号 (OP,ARG1,ARG2)4、语法制导翻译4.1、翻译任务的处理过程编译程序的整个任务就是把源程序翻译为目标程序。实际上可以把每个编译阶段都看作是完成一定翻译任务的处理过程:词法分析阶段把字符流翻译为单词流,语法分析阶段把单词流翻译为语法树,目标代码生成阶段把语法树翻译为汇编语言等等。4.2、语法制导翻译:在语法分析过程中,随着分析的步步进展,每当进行推导或归约时,同步的去执行每个产生式所附带的语义规则描述的语义动作(或语义

14、子程序),这样进行翻译的办法称作语法制导翻译。所谓属性依赖图是一个有向图,用于描述分析树中的属性和属性间的相互依赖关系。43、基于属性文法的处理方法输入串语法树 依赖图 计算语义规则顺序语法分析树遍历执行语义规则语义规则的计算可能产生代码,在符号表中存取信息,给出出错信息或执行其它动作。对输入串的翻译也就是根据语义规则进行计算的结果。5、中间代码形式的描述及中间代码序列的结构设计本次设计,使用的中间代码为三地址码。三元式有三个组成成分:算符op,第一和第二运算对象ARG1和ARG2。例如:有中缀式a:b*cb*c,求其等价的三元式。 三元式编号 算符 左对象 右对象 op arg1 arg2(

15、1) minus c(2) b (1)(3) minus c(4) b (3)(5) (4) (2)(6) assign a设计并生成的结果程序,最终需要将用户输入的程序经过词法分析和语法分析,生成如上所述的三元式表示的中间代码形式。6、简要的分析与概要设计程序由词法分析和语法分析两部分构成:6.1、词法分析:int buffer()/载入 int i=0;cout输入程序,以#作为结束标志。endl;for(int n=0;n=MAX;n+) for(;i=65&ch=97&=122) return(true);else return(false);bool IsDigit(char ch)

16、/判断是否是数字 =48&=57) char GetChar(int i)/读取字符 char ch;ch=stri;return(ch);char GetBC(char ch)/判断是不是空格或者换行,如果是,直接读取下一个字符直道不再空白为止 if(ch=32|ch=10) turn+;ch=GetChar(turn);ch=GetBC(ch);/递归实现 void Concat()/连接,即为strtoken赋值 strTokenn=ch;n+;int Reserve()/以单词为单位查找保留字,是则返回编码,不是则返回0,用来区分标志符和保留字 if(strcmp(strToken,

17、DIM0)=0)/调用strcmp函数实现, return(1);else if(strcmp(strToken,for0)=0) return(2);step0return(3);until0return(4);do0return(5);return(6);void clear() n=0;6.2、语法递归分析int A(int * c,int & q) if(cq+=3) if(cq=7) q+;return 1;else coutstep右部出错return 0;else couterror stepint B(int * b,int & o) if(bo+=4) if(bo=7) o+

18、;until右部出错untilint S2(int * d,int & h) if(dh+=6) if(dh+=8) if(dh=6|dh=7) h+; return 1;赋值语句右部出错 赋值语句缺少赋值运算符 赋值语句左部出错 int S1(int * m,int & n) if(S2(m,n) if(A(m,n) if(B(m,n) return 1;else return 0;else return 0;int S(int *a,int & z) if (az+=2) if (S1(a,z) if(az+=5) if(S2(a,z) succeed!do return 0;for6.3

19、、制导翻译if(!S(ana,j) cout语法出错! coutwordi!=0record1-wordi+;record2-word0;i=0;while(record3-record3-101 goto 103102 :=+while(record5-record5-103 if while(record7-record7- goto 105104 goto 107105 while(record9-record9-while(record11-record11-106 goto 102107 end6.4、主函数void main() *产生式*/ for step until do i j = S -for S1 do S2 / 编号 2 3 4 5 6 7 8 S1 -S2AB S2 -i=j A -stepj B -untiljint num;turn=0;num=buffer()-1;int x=0;/计识别的单词的个数 turnsort=kind;/12345或6 (for(int i=0;n;recordx-wordi=strTokeni;wordi;/输出识别的标志符或保留字 ,kind)wordi=clear();x+;else if(IsDigit(ch) while(IsDigit(ch)&ki

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

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