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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

FOR循环语句的翻译程序设计简单优先法输出四元式.docx

1、FOR循环语句的翻译程序设计简单优先法输出四元式学 号: 0120810340631课 程 设 计题 目FOR循环语句的翻译程序设计(简单优先法、输出四元式)学 院计算机科学与技术专 业计算机科学与技术班 级0806姓 名张军指导教师郭羽成2011年1月7日课程设计任务书学生姓名: 张 军 专业班级: 计算机0806班 指导教师: 郭羽成 工作单位:计算机科学与技术学院 题目: FOR循环语句的翻译程序设计(简单优先法、输出四元式)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务: (包括

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

3、试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名: 2011年 1月 7日系主任(或责任教师)签名: 2011年 1月 7日FOR循环语句的翻译程序设计(简单优先法、输出四元式)1 系统描述(问题域描述)1.1设计目的 通过学习编译原理的相关内容,设计并编写FOR循环语句的翻译程序,使用简单优先法,

4、按四元式输出,能够实现词法分析,语法和语义的分析,加深对所学知识的理解,并且能够熟练运用到实际当中。 1.2设计内容描述FOR循环语句的基本格式如下:FOR(表达式1;表达式2;表达式3)根据所给题目要求,设计出符合FOR循环语句的文法及属性文法的描述,语法分析方法以及四元式的输出方式,罗列出词法分析和语法分析的流程,根据语法规则设计输入输出方法,简单优先法中的优先关系表格。设计好并且进行编译,设计若干输入输出用例(包括正确的输入和错误的输入,用来检查程序的完整性),例如:For(i=0;i50;i+)m=m+j; /正确输入For(i=0;i(A;B;C)H;(A;D;E)H;A=ID=CO

5、UNT B=IDID+D=IDCOUNTE=ID-H=ID1=ID2+ID3ID1=ID2+COUNTID1=COUNT+ID2由产生式对应的语义动作:S=(A;B;C)H;(A;D;E)H; GOTO;A=ID=COUNT ID.CODE=COUNT.CODE;B=ID=COUNT.CODE GOTO OVER;C=ID+ ID.CODE=ID.CODE+1;D=IDCOUNT IF ID.CODEID- ID.CODE=ID.CODE-1;H=ID1=ID2+ID3ID1=ID2+COUNT ID1.CODE=ID2.CODE+ID3.CODE OR ID1=COUNT+ID2 ID1.C

6、ODE=ID2.CODE+COUNT OR ID1.CODE=COUNT+ID2.CODE 3 语法分析方法描述及语法分析表设计3.1语法分析方法描述本次课程设计要求使用简单优先关系方法。简单优先分析法的基本思想史对一个文法按照一定原则求出该文法所有符号即包括终结符和非终结符之间的优先关系确定归约过程中的句柄,它的归约实际上是一种规范归约。一个文法是简单优先文法必须满足以下条件(1)在文法符号集V中,任意两个符号之间最多只有一种优先关系成立;(2)在文法中任意两个产生式没有相同的右部。三种优先关系及其判定方法如下所示:(1)X=Y 表示X和Y的优先关系相等,当且仅当G中存在产生式规则AXY;(

7、2)XY表示X的优先性比Y的优先性大,当且仅当G中存在产生式规则 ABD,且BX和DY;(4)对任何X,若文法开始符号SX,则#。3.2 分析法操作步骤由简单优先分析法的基本思想设计的如下算法,首先要构造优先关系矩阵(如3.3所示),并将文法产生式保存,设置符号栈S:(1)将输入符号串a1a2an # 依次逐个保存符号栈S中,直到遇到栈顶符号ai的优先性下一个待输入符号aj为止。(2)栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到ak-1ak为止。(3)由句柄akai在文法的产生式中查找右部为akai的产生式,若找到则用相应左部代替句柄,找不到则为出错,这是可断定输入串不是

8、该文法的句子。(4)重复(1)(2)(3),直到归约完输入符号串,栈中只剩文法的开始符号为止。 3.3优先关系矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 S E F G H X Y f ( ) = c + ; i # S 1 E 0 F 0 G 0 H 0 X 0 Y 0 f 0 ( 0 -1 ) 0 0 -1 1 = 0 0 c 0 1 0 + 1 0 0 0 1 0 ; 0 0 0 0 0 -1 i 0 0 0 0 0 1 # -1 -1 0 S E F G H X Y f ( ) = c + ; i # 其中,0表示列

9、中的符号优先级=行中的符号优先级;1表示列中的符号优先级行中的符号优先级;-1表示列中的符号优先级行中的符号优先级;空白表示,没有优先级关系,即在语法规则中符号没有相邻关系,在程序中用返回值-2表示。4 中间代码形式的描述及中间代码序列的结构设计四元式是一种比较普遍采用的中间代码形式四元式的四个组成成分是:算符OP。、,第一和第二运算对象ARG1和ARG2及运算结果RESULT。运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。对于本程序的具体四元式输出,预计显示结果如下:给定输入程序For(i=0;i=50 goto over(3) + m j T(4) = T -

10、m(5) + i 1 i(6) goto (2)(7) over 5 编译系统的概要设计 主要函数及对应实现的功能如下表所示:函数名称实现功能Main()程序入口getline()接受输入程序保存在string中Recstr()词法分析,分离符号Getchar()对输入流中的符号进行分析Identify()辨别普通标识符和关键字Gramcheck()语法分析Compare()比较优先关系词法分析以输入的字符串为基础进行判断,如果输入合法则将各个字符进行分类显示;语法分析以词法分析的结果作为依据,验证输入流中的各种符号是否符合规则。 6 详细的算法描述(流程图或伪代码)6.1main()的实现i

11、nt main() /输出语法规则 int i=0; string s; getline(cin,s); /将输入保存到S中 Recstr(s,i); /词法分析 nodenodeSize.type=21;nodeSize+; symStack.push(21); gramCheck(); /语法分析 return 0;6.2词法分析过程词法分析过程是个相对独立的过程,将输入的字符串定义到一个结构体数组当中,对数组中的字符或者单词进行判定和分类,包含的类型有关键字,变量,界符,运算符,数字,并且在此部分将各个涉及到的字符进行标号,从1到21。结构体struct symNode保存词法分析后的单

12、词信息;数组symNode node用来保存词法分析结果作为语法分析的输入;void Recstr()是词法分析主体部分;void getChar()用来取字符串;void Identify()判断区分是关键字(for)还是普通标识符。词法分析的流程图: Y N Y N Y NY N 词法分析的输出方式以二元方式输出,形式为(字符,所属类型) 6.3语法分析语法分析当中设计的实现过程:Compare() /读入优先关系矩阵,用来做语法分析,比较符号栈的首部和输入 流的首部,大于返回1,小于返回-1,等于返回0,无关返回-2 gramCheck() /词法分析:如果栈中符号是开始符,输入流只剩下

13、#,则分析 成功 比较优先关系: 返回值为-1,符号入栈,并且输入流当前位置+1 返回值为0,符号入栈,并且输入流当前位置+1 返回值为1,栈中符号向左寻找句柄,根据句 柄寻找产生式,找到则将产生式左部符号入栈, 根据语义规则生成产生式 语法分析流程如下: Y N Y N Y N N Y6.4 四元式的输出在程序输入为正确输入的前提下,四元表达式为7个,根据语法分析产生中间代码,设计输出的格式比较固定,下面给出代码片段作为介绍:if(tempStack.size()=12)/输出第5 6 7行 symStack.push(1); if(iAOD=17) cout(5) (+,it,1,it)e

14、ndl; else if(iAOD=18) cout(5) (-,it,1,it)endl; cout(6) goto (2)endl; cout(7) over:endl; else if(tempStack.size()=5)/输出3 4行 symStack.push(5); cout(3) (+,; if(nodeposition-3.type=20) coutnodeposition-3.sValue,; else if(nodeposition-3.type=14) coutnodeposition-3.eValue,; if(nodeposition-1.type=20) cout

15、nodeposition-1.sValue,T)endl; else if(nodeposition-1.type=14) coutnodeposition-1.eValue,T)endl; cout(4) (=,T,-,nodeposition-5.sValue)endl; Else / 输出1 2行 7 测试方法和测试结果计算机系统:Windows XP SP3编译调试环境:Visual C+ 6.0程序语言:c+设计测试用例: (1)正确的程序输入:For(i=0;i50;i-)m=m+20; 程序输入及词法分析结果略; 四元表达式如下: (2)错误的程序输入:For(i=0;i60;i

16、+)m=m+i 程序输入以及词法分析略 生成四元式如下:结果分析:正确输入程序段后,能够进行词法分析,并且准确输出四元表达式,词法分析结果与实际相符合,四元式与预期结果一致,程序成功运行。输入错误程序段后,能够进行词法分析,词法分析结果与实际相符合,但是由于是错误程序段,则不能顺利输出所有四元式,只能根据简单优先法分析到哪里输出到哪里,如上所示,只能成功分析出2行。程序出错会报出错位,上例中程序段最后缺少“;”,因此报错位为21.程序不足:由于个人能力有限,产生式规则定义的比较简单,不是很全面,比如只能进行“i+”或者“i-”之类的运算而没能实现“+i”或者“-i”等的运算,执行部分也只定义了

17、一个算式,无法进行2个或2个以上算式的运行,这些都有待改进。 8 研制报告研制过程:经过了一学期的编译原理的学习,对编译原理的基本方法有了初步了解。结合相关书籍以及互联网上的资料,实现了本次程序的研制。在确定了所要设计的For语句属性文法之后,把程序整体划分为主要的2个部分:词法分析部分和语法分析部分。而后对这两个部分进行了进一步的分析:词法分析主要针对输入的字符进行判别的分类,将分类结果显示出来,该结果将直接作为语法分析的主要依据;语法分析使用的是简单优先法,此种方法需要制定出优先关系矩阵,根据程序所需,将涉及到的21个字符进行编号1-21,依次逐个比较优先关系,制定出优先关系矩阵。绘制出流

18、程图之后,根据流程进行程序的编写会变得简单很多,之后进行的就是编译调试和改写工作。自我感受:课程设计历时4天,在这4天里很忙,课程设计也是在考试过后的空闲时间编写完成的,因此看起来会比较粗糙,这个是时间上安排出的问题,同时也暴露出了个人能力需要很大提高的这个缺陷。在今后的学习中,我会多多向他人学习,多借鉴他人优秀的编程方法和思想,并且多做练习,达到学以致用。有时间我会把这个程序做的更加完美的。9 参考文献【1】张素琴、吕映芝、蒋维杜、戴桂兰等编译原理(第二版)清华大学出版社2006年10月【2】算数表达式的翻译(简单优先法,输出四元式),搜狐博客 【3】王雷等编译原理课程设计机械工业出版社2005年3月本科生课程设计成绩评定表班级:计科0806姓名:张军学号:0120810340631序号评分项目满分实得分1学习态度认真、遵守纪律102设计分析合理性103设计方案正确性、可行性、创造性204设计结果正确性405设计报告的规范性106设计验收10总得分/等级评语:注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、及格(60-69分)、60分以下为不及格指导教师签名: 2011 年1月日

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

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