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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理while语句的翻译.docx

1、编译原理while语句的翻译学 号: 0121010340328课 程 设 计题 目WHILE循环语句的翻译程序设计(简单优先法、输出四元式)学 院计算机科学与技术学院专 业计算机科学与技术专业班 级1003班姓 名刘颖指导教师李玉强2013年1月11日目录 任务书.2 1.系统描述.3 2.文法及属性文法的描述.3 3.语法分析方法的描述及分析表设计.3 3.1.语法分析方法的描述.3 3.2.优先关系表.4 4.1.中间代码形式的描述.4 4.2.中间代码序列的结构设计.4 5.编译系统的概要设计.4 6.详细的算法描述(流程图或伪代码).5 6.1.主函数伪代码.5 6.2.词法分析总控

2、流程图.5 6.3.语法分析.5 7.源程序.6 7.1.优先关系.6 7.2.词法分析.6 7.3.语法分析.10 7.4.归约函数.10 8.软件的测试方法和测试结果.11 8.1.输入.11 8.2.词法分析结果.11 8.3.语法分析结果.12 9.研制报告.12 10.参考文献.13 11.开发工具.13 评分表.14课程设计任务书学生姓名: 刘颖 专业班级: 计算机1003班 指导教师: 李玉强 工作单位:计算机科学与技术学院 题目: WHILE循环语句的翻译程序设计(简单优先法、输出四元式)初始条件:理论:学完编译原理课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算

3、机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 写出符合给定的语法分析方法的文法及属性文法。(2) 完成题目要求的中间代码四元式的描述。(3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。(5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编

4、译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名: 2012年 11月 13日系主任(或责任教师)签名: 2012年 11月 13日一、系统描述(问题域描述)理解和分析C+中的while循环语句,应用在编译原理课程中学习的

5、词法分析、语法分析、语义分析、中间代码生成及四元式等知识,用简单优先法分析while语句,并用四元式形式输出。词法分析的输入取自含有while循环语句的txt文件,结果存入另一txt文件并作为语法分析的输入。1.按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。 2.按给定的题目给出语法分析方法的思想及分析表设计。 3.按给定的题目给出中间代码序列的结构设计。 4.完成相应的词法分析、语法分析和语义分析程序设计。 5.编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。二、文法及属性文法的描述 文法G=(VN ,VT ,P ,S) VN=S,C,E,F, VT=whil

6、e,do,(,),;,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,w,x,y,z,_,+,-,*,%,/,=,=,=,!=,. P= S-while C do E=F C-(FF)|(F=F)|(FE|E+E|E*E|E-E|E/E E-character|number character-a|b|.|z|character(a|b|.|z) number-0|1.|9|number(0|1.|9) 3、语法分析方法的描述及分析表设计3.1语法分析方法的描述 简单优先分析法是按照文法符号(终极符和非终极符)的优先关系确

7、定句柄的。首先根据已知文法求出相应优先关系,并将文法的产生式保存,设置符号栈S,步骤如下:(1)将输入符号串a1a2an#依次逐个存入符号栈S中,直到遇到栈顶符号ai的优先性下一个待输入符号aj为止。(2) 栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到 ak-1语法分析之后,取出其中的运算表达式。对表达式进行分析。其中,先乘除后加减,先运算括号内的。如a=b*c+b*d 的四元式表示如下:1.(*,b, c, t1)2.(*, b, d, t2)3.(+, t1, t2, t3)4.(=, t3, -, a)五、编译系统的概要设计 1 通过程序,在in.txt文本中输入w

8、hile语句。对文本进行扫描,通过词法分析函数对输入的while语句进行词法分析,结果以二元式形式保存在out.txt中。 2 将已算好的优先关系矩阵以二维数组的形式放至程序中。对已进行词法分析的while语句进行语法分析,其中包括进栈函数和归约,当满足归约条件时由进栈函数调用规约函数,其中包含对错误语句的报错处理。将分析过程输出到yufafenxi.txt中 3 通过四元式输出函数将运算表达式表示为四元式的形式,输出到yufafenxi.txt中。6、详细的算法描述(流程图)6.1.主函数伪代码void main() Precedence();/调用优先关系函数求解 Lexical();/调

9、用词法分析程序 Syntax();/调用语法分析程序 6.2.词法分析总控程序 6.3.语法分析程序7、源程序7.1.优先关系函数void Precedence() int i,j; for(i=0;i=16;i+) for(j=0;j=16;j+) PreTableij=ER; PreTable10=LT; for(i=0;i=8;i+) PreTablei8=PreTablei10=PreTablei11=PreTablei14=LT; PreTable18=PreTable111=PreTable114=ER; PreTable614=PreTable714=PreTable112=Pr

10、eTable013=EQ; PreTable015=LT; PreTable215=PreTable315=PreTable415=PreTable515=PreTable815=EQ; for(i=9;i=11;i+) for(j=1;j8;j+) PreTableij=GT; PreTable95=PreTable115=ER; PreTable105=PreTable131=EQ; PreTable99=PreTable109=PreTable119=GT; PreTable916=PreTable1016=PreTable1116=PreTable1216=GT; PreTable14

11、1=PreTable142=PreTable143=PreTable144=GT; PreTable146=PreTable147=EQ; PreTable149=PreTable1416=PreTable151=PreTable1516=GT; PreTable152=PreTable153=PreTable154=PreTable159=EQ; PreTable160=PreTable1610=LT; 7.2.词法分析函数 void Lexical() char *pch,str100,*pstr,*pt; char ch200=0; int length; int i=0,u=-1; w

12、hile(!infile.eof()/判断文件是否读完? u+; chu=infile.get(); pch=ch; length=strlen(ch); pch=ch; printf(词法分析结果:n); outfc词法分析结果: endl; while(pch=ch+length) pstr=str; while(*pch= |*pch=(|*pch=) pch+; pt=pch; f(isalpha(*pch) while(isalnum(*pch) *pstr=*pch; pstr+; pch+; *pstr=0; if(strcmp(str,while)=0) printf(关键字

13、whilen); outfc关键字whileendl; Buffi.p=0; Buffi+.adr=NULL; else if(strcmp(str,do)=0) printf(关键字 don); outfc关键字 doendl; Buffi.p=1; Buffi+.adr=NULL; else printf(标识符 ); outfc标识符 ; printf(str); printf(n); outfcstrendl; Buffi.p=10; Buffi+.adr=pt; else if(isdigit(*pch) pt=pch; printf(数字 ); outfc数字 ; while(is

14、digit(*pch) printf(%c,*pch); outfc*pch; pch+; outfcendl; printf( ); outfc ; Buffi.p=11; Buffi+.adr=pt; if(*pch=) if(*(pch+1)=) printf(等于 =n); outfc等于 =endl; pch+; pch+; Buffi.p=4; Buffi+.adr=NULL; else printf(赋值符 =n); outfc赋值符 =endl; pch+; Buffi.p=5; Buffi+.adr=NULL; else if(*pch=*) printf(乘号 *n); o

15、utfc乘号 *endl; pch+; Buffi.p=7; Buffi+.adr=NULL; else if(*pch=+) printf(加号 +n); outfc加号 +endl; pch+; Buffi.p=6; Buffi+.adr=NULL; else if(*pch=-) t=1; printf(减号 -n); outfc减号 -endl; pch+; Buffi.p=6; Buffi+.adr=NULL; else if(*pch=/) t=1; printf(除号 /n); outfc除号 /endl; pch+; Buffi.p=7; Buffi+.adr=NULL; el

16、se if(*pch =) printf(小于号 n); outfc小于号 ) printf(大于号 n); outfc=3&outstringlen.p=15) middlen+=#; middlen+=Tn+; Push(13,&middlen-2); else Push(-1,NULL); 八、软件的测试方法和测试结果8.1.程序的输入 程序的输入在in.txt中,while语句为:while(ab)do d=e/3 8.2.词法分析结果 8.3.语法分析结果 九、研制报告这次程序设计让我对编译中简单优先分析法有了更加深刻的了解。一个编译程序的工作过程一般可以划分为五个阶段:词法分析、语

17、法分析、语义分析与中间代码生成、优化、目标代码生成。每个阶段都是从上一个阶段得到结果,对他进行分析,并且根据一些外部环境(例如符号表等)得到最终的输出结果。经过大量思考完成这个课设使我明白了很多,也了解了自己的不足。在设计过程中,产生式、优先关系矩阵及算法的描述方面或多或少的有些欠缺,能够通过简单while循环语句的编译;但是,当语句更加复杂时,比如do后面的语句为复合运算式时无法识别,显示语法错误;只能对简单运算进行分析,这些问题都需要进一步改进。由于我个人的编程水平不高,导致程序的大量冗余,过于复杂。通过与从网上查找到的程序对比,发现我的程序不够简洁,算法思想仍然有些狭隘,不能更准确更简洁的将我的算法思想写出来。在这些方面,我仍需努力。编译原理这门学科对于我来说算是比较难懂的了,对于自己在过去一周的课程设计中,我学到了不少的东西,当然是通过和同学交流讨论所学习到的,虽然不是很精通,但是多少还是了解了

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

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