《编译原理大作业.pdf》由会员分享,可在线阅读,更多相关《编译原理大作业.pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课课 程程 设设 计计题题目目布尔表达式的翻译程序学学院院计算机科学与技术学院专专业业班班级级姓姓名名指导教师指导教师2013 年1月12日1学学号:号:课程设计任务书课程设计任务书学生姓名:学生姓名:专业班级:专业班级:指导教师:指导教师:工作单位:工作单位:计算机学院计算机学院题题目目:布尔表达式的翻译程序布尔表达式的翻译程序初始条件:初始条件:程序设计语言:C+算法:根据编译原理课程所讲授的算法进行设计。要求完成的主要任务要求完成的主要任务:(包括课程设计工作量及其技术要求,说明书撰写等具体要求)针对布尔表达式的文法:BTBBand T B|TFT TorFT|Fnot F|truefa
2、lse|(B)|i rop i利用递归下降分析法编制、调试其语法及语义分析程序,生成的中间代码为逆波兰式。编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。时间安排:时间安排:消化资料、系统调查、形式描述1 天系统分析、总体设计、实施计划3 天撰写课程设计报告书1 天指导教师签名:指导教师签名:2013 2013 年年 1 1 月月 12 12 日日系主任(或责任教师)签名:系主任(或责任教师)签名:2013 2013 年年 1 1 月月 12 12 日日1 引言2“编译原理”是一门研究设计和构造编译程序原理和方法的课程,是计算机各专业的一门重要的专业基础课。编译原理这门课程蕴含
3、着计算机学科中解决问题的思路、形式化问题和解决问题的方法,对应用软件和系统软件的设计与开发有一定的启发和指导作用。“编译原理”是一门实践性较强的课程,要掌握这门课程中的思想,就必须要把所学到的知识付诸实践。而课程设计是将理论与实践相互联系的一种重要方式。2 概述2.1 设计题目布尔表达式的翻译程序2.2 设计目的课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,设计题中的问题比平时的练习题要复杂,也更接近实际。编译原理这门课程安排的课程设计的目的是旨在要求学生进一步巩固课堂上所学的理论知识,深化理解和灵活掌握教学内容,选择合适的数据逻辑结构表示
4、问题,然后编制算法和程序完成设计要求,从而进一步培养学生独立思考问题、分析问题、解决实际问题的动手能力。2.3 设计任务内容布尔表达式的文法:B TB B and T B|T FT T or FT|F not F|true false|(B)|i rop i设计布尔表达式文法,给出该文法的属性文法,用递归下降分析法实现对布尔表达式的翻译,给出翻译的逆波兰式结果。3 设计环境与工具3Visual C+4 设计原则4.1 基本方法在本程序中,输入一段布尔语句,使用递归下降的方法得到其推到过程,并利用递归下降翻译的方法的到四元式序列,最终根据生成的四元式序列分析得到逆波兰式。4.2 属性文法B TB
5、 B.in=T.typeB and T B B.in=T.type addtype(and,entry,B.in)B B.val=T FT T.in=F.type.T or FT T.in=F.type addtype(or,entry,B.in)T Tval=F not F F.val=not.F.valF true F.val=trueF false F.val=falseF(B)F.val=B.valF i rop i F.val=i.lexvalrop i.lexval addtype(i,entry,l.in)5 简要的分析与概要设计在该程序中,总共包括3 个主要功能,第一个功能是对
6、输入的布尔语句进行递归下降的分析,从而得出从文法到该布尔语句的推导过程,第二个功能是使用递归下降的方法,该布尔语句的四元式序列,第三个功能对四元式序列进行扫描并分析每个四元式的结构特点,并据此将四元式转化为逆波兰式。main 函数的流程图如下:4在开始进行本次实验中,本来计划在递归下降分析的过程中就得到逆波兰式,但是经过多次尝试之后总是存在错误,所以采用先得到四元式序列,再根据四元式序列生成逆波兰式这种效率比较低的方法。6 详细的算法描述 6.1 主要数据结构的设计四元式类在该类中,要包含四元式中的四个元素,运算结果,两个运算数以及一个运算符号class quadpublic:char res
7、ult8;char arg18;char op8;char arg28;void print()/输出该四元式5coutresult=arg1 op arg2endl;q20;Word 结构体这个结构体的对要用来存储单个单词,包括一个字符串成员。struct wordchar w10;void print()coutwTB,然后执行 T()与 B1()流程图为非终结符 T 对应的函数 T()该函数首先要写入 T=FT,然后执行 F()与 T1()流程图为:8非终结符 B对应的函数 B1()在该函数中如果读入的下一个单词是“and”则写入 B=and T B.否则,要写入 B推出了空串。流程图为
8、:非终结符 T对应的函数 T1()在该函数中如果读入的下一个单词是“or”则写入 T=or FT.否则,要写入 T推出了空串。流程图为:9非终结符 F 对应的函数 F()由于非终结符 F 对应的推出式比较多,所以该函数的分支也比较多,当读入“not”时,则写入 F=not F 并执行 F()函数,当读入”true”或者”false”时,则要写入 F=true 或者 F=false 当读入的字符为”(”时,则写入 F=(B),并执行 B()函数,当读入的单词为 i 时,要写入 F=i rop i.流程图为:10在完成该功能时,推到过程存入到 tuidao 类生成的对象数组中。6.4 递归下降得到
9、四元式序列生成四元式必须分析布尔语句,and 语句以及最小的分析单元三个部分expression()函数分析布尔语句,term()分析 and 语句,unit()分析最小单元该过程的入口函数 run1()流程图如下:expression()函数该函数首先调用了一个 term 函数,如果下一个读到单词是“or”则分析 or后面的一个term并将or和两个term写入到四元式序列中,如果读到的不是“or”则只把 term 返回到四元式序列中。流程图如下:11term()函数该函数首先调用了一个 factor 函数,如果下一个读到单词是“and”则分析and 后面的一个 factor 并将 or 和
10、两个 factor 写入到四元式序列中,如果读到的不是“and”则只把 factor 返回到四元式序列中。流程图为:12unit()函数在该函数中,分析了优先级最高的运算或者是单个终结符,如果读入的是 true或者 false 则直接返回 token,如果读入的是 i 则把 i rop i 写入到四元式序列中,如果读入的是 not,则分析 not 后面的 expression(),并将 not 以及expression()写入到四元式中,返回生成的 newtemp流程图:13该过程结束后,布尔语句对应的四元式存放在 quad 类生成的对象数组 q 中.6.5 分析四元式序列生成逆波兰式本过程根
11、据四元式序列以及每一个四元式的类型,将四元式中的信息按照一定规则写入到逆波兰式中,主要函数为 bolan()函数,bolan 函数将四元式序列从头到尾扫描一遍,对于每一个四元式序列根据其操作数是临时变量还是终结符将终结符以及操作符按照逆波兰式规则写入到逆波兰式类生成的对象 n 中。当当前四元式类型为 临时变量=临时变量 OP 临时变量是,则直接将 op 插入到逆波兰式尾部。当当前四元式类型为 临时便令=arg1 op arg2时则按照 arg1,arg2,op 的顺序将他们插入逆波兰式的尾部。当当前四元式类型为 临时便令=临时变量 op arg1 时则按照 arg1,op 的顺序将他们插入逆波
12、兰式的尾部。14当当前四元式类型为 临时便令=arg1 op 临时变量时则将 op 的顺序将他们插入逆波兰式的尾部,将 arg1 插入到逆波兰式的首部。bolan 函数的流程图为:本过程结束之后,逆波兰式存放在 nibolan 类定义的对象 n 中。7 软件的测试方法和测试结果输入一个字符串,执行改程序,观察产生的四元式以及逆波兰式是否正确。测试数据 1:15测试数据 2测试数据 3168 设计的特点、不足收获与体会8.1 设计的特点这次课程设计中,使用递归下降分析方法完成了布尔语句的翻译,程序不仅按照题目要求的到了翻译的逆波兰式,而且还求出了布尔语句的推导过程和四元式,实现的功能比较多,对翻
13、译的过程和结果有一个比较全面的描述。程序的逻辑明确,易于理解。8.2 设计的不足由于程序设计水平有限,在本次课程设计的程序中存在着两个主要问题:(1):没有在递归下降的过程中直接求出逆波兰式,而是根据生成的四元式序列产生的逆波兰式,虽然可以达到题目的要求,但是程序的效率比较低。(2):在递归下降生成逆波兰式的过程中,由于最小单元函数中读入”not”以及”(”的分支中出现了问题,导致了在调试过程中 not 语句以及括号中语句必须放在最后,否则在分析完该单元之后程序不再继续向后扫描。导致了布尔语句17分析不全。8.38.3 收获与体会收获与体会在何老师的指导下,经过编码与调试,我终于完成了这次课程
14、设计,通过本次课程设计,我更加认识到了编译原理这门课的重要性,对于这门课在实践中是如何应用的有了一个更深的理解。虽然程序中有很多错误与漏洞,但是我仍然获得了很多,我不仅熟练地掌握了递归下降分析的方法,更加强了自己程序设计的能了,认识到了实践的重要性。9 参考文献1)编译原理,主编:胡伦俊、徐兰芳、骆婷,出版社:电子工业出版社,出版时间:2005 年 12 月2)程序设计语言编译原理(第 3 版),主编:陈火旺、刘春林等,出版社:国防工业出版社,出版时间:2003 年 2 月3)编译原理(第二版),主编:吕映芝、张素琴、蒋维杜,出版社:清华大学出版社,出版时间:2004 年 11 月4)编译原理
15、与技术(第二版),主编:陈意云,出版社:中国科学技术大学出版社,出版时间:2002 年 1 月5)编译原理实践教程,主编:胡元义、邓亚玲、胡英,出版社:西安电子科技大学出版社,出版时间:2002 年 1 月6)编译原理课程设计,主编:王雷、刘志成、周晶,出版社:机械工业出版社,出版时间:2005 年 3 月7)编译原理学习指导,主编:胡元义、柯丽芳,出版社:西安电子科技大学出版社,出版时间:2004 年 1 月18本科生课程设计成绩评定表本科生课程设计成绩评定表班级:姓名:学号:序号123456评分项目学习态度认真、遵守纪律设计分析合理性设计方案正确性、可行性、创造性设计结果正确性设计报告的规范性设计验收满分101020401010总得分/等级实得分评语:注:最终成绩以五级分制记。优(90-100 分)、良(80-89 分)、中(70-79 分)、及格(60-69 分)、60 分以下为不及格指导教师签名:2013 年 1月 12日19
限制150内