编译原理课程设计报告说明书--- DO-WHILE循环语句的翻译程序设计.docx_第1页
编译原理课程设计报告说明书--- DO-WHILE循环语句的翻译程序设计.docx_第2页
编译原理课程设计报告说明书--- DO-WHILE循环语句的翻译程序设计.docx_第3页
编译原理课程设计报告说明书--- DO-WHILE循环语句的翻译程序设计.docx_第4页
编译原理课程设计报告说明书--- DO-WHILE循环语句的翻译程序设计.docx_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计任务书题目: do-while循环语句的翻译程序设计(递归下降法、输出四元式)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1) 写出符合给定的语法分析方法的文法及属性文法。(2) 完成题目要求的中间代码四元式的描述。(3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。(5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1 系统描述(问题域描述);2 文法及属性文法的描述;3 语法分析方法描述及语法分析表设计;4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5 编译系统的概要设计;6 详细的算法描述(流程图或伪代码);7 软件的测试方法和测试结果;8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9 参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名: 2009年 11月 23日系主任(或责任教师)签名: 2009年 11月 23日do-while语句的翻译分析程序设计 递归下降法、输出四元式1问题描述设计一个do-while循环语句的词法语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。2文法及属性文法的描述。2.1 do-while循环语句的文法产生式为s- do e while a,为便于语法制导翻译将其改写如下: 文法g(s)如下: s-doawhile(p); a-id=e; e-te e-+te | -te | e t-ft t-*ft | /ft | e f-(e) | id p-e rop id rop- | = | = | != | =2.2 do-while循环语句的属性文法:产生式语义规则sdo a while p s.begin:=newlabel;e.true:=newlabel;e.false:=s.next;s1.next:=s.begin;s.code:=gen(s.begin:e。codegen(e.true:) s1.codegen(goto s.begin) 3.语法分析方法及中间代码形式的描述3.1语法分析方法递归下降法的实现思想是为文法的每个非终结符号设计一个相对应的递归子程序,识别程序由一组这样的子程序组成。它的优点是简单直观,易于构造,很多编译系统所实现缺点是对文法要求很高,由于递归调用多,影响分析器的效率其文法可以表示为: ete+t tft*f fi(e)可以用语法图来表示语言的文法,如图:tt+e*ffte)(if3.2中间代码形式描述 中间代码采用四元式输出,一个四元式是一个带有四个域的记录结构,这四个域分别称为oparg1arg2及result。域op包含一个代表运算符的内部码。语句doc=a+b; while (ab)的四元式输出形式如下: 100 ( + , a , b , t ) 101 ( = , t , - , c ) 102 ( jdoawhile(p); a-id=e; e-te e-+te | -te | e t-ft t-*ft | /ft | e f-(e) | id p-e rop id rop- | = | (e) | id if(p-type=6) p=p-next; e(p); if(p-type=7)p=p-next; else error(p); else if(p-type=0) p=p-next; else error(p); /-void extend_t(word_node *&p) /t-*ft | /ft | eif(p-type=5)p=p-next;f(p); extend_t(p);/-void t(word_node *&p) /t-ftif(p-type=6 | p-type=0) f(p); extend_t(p);else error(p); /-void extend_e(word_node *&p) /e-+te | -te | eif(p-type=4)p=p-next;t(p); extend_e(p);/-void e(word_node *&p) /e-teif(p-type=6 | p-type=0) t(p); extend_e(p); else error(p);/-void p(word_node *&p) /p-e rop bif(p-type=6 | p-type=0) e(p); rop(p); if( p-type=0) p=p-next; else error(p);/-void a(word_node *&p) if(p-type=0) p=p-next;if(p-type=3)p=p-next; e(p);if(p-type=-1) p=p-next; else error(p); elseerror(p);elseerror(p); /-bool s(word_node *&p) /doa;while(p); p=p-next;if(p-type=1)/ do p=p-next; if(p-type=11)/ p=p-next;a(p); if(p-type=12)/ p=p-next;if(p-type=2)/ while p=p-next;if(p-type=6)/ (p=p-next; p(p);if(p-type=7)/ ) p=p-next; if(p-type=-1)/ ; cout语法分析完成,没有错误!endl;return true; else error(p);return false; else error(p); return false; else error(p);return false; else error(p);return false;else error(p);return false;elseerror(p);return false;else error(p);return false;6测试方法和测试结果6.1测试方法及测试用例在c+环境下,设计几个有代表的用例,进行测试。测试用例如下:6.2测试结果测试结果如下:7设计的特点及收获与体会7.1设计的特点本次设计是采用递归下降的方法对输入的do while 循环语句进行语法,语义分析,并输出四元式。因此程序中根据具体对每个非终结符都编写了相应的递归子函数,当在语法制导翻译过程中若碰到该非终结符则调用相应的子函数,这一点充分体现了递归下降的分析方法。此外,在输出四元式时我采用的是用链表的方法,利用指针的移动输出要输出的四元式。7.2设计的收获与体会 本次课程设计巩固了我所学习的关于递归下降法这一方面的知识,并且使我对 do-while循环语句也有了更深刻的理解。同时我对在vc+环境下编程有了一定的认识,就是当某一模块开始时,要预先分析设计有哪些小模块构成;自顶向下,分为各子模块以便于实现为目的划分,设计时要明确各子模块的功能及参数。这就要求我们在编程开始时一定要在脑海中对该程序的总体结构有一定的了解,要画出程序的流程图,再细细一步步完善。另外,在编写各个模块和函数时,一定要注意变量的初始化,这次程序中用的链表存储结构,指针的初始指向一定要明确,否则程序在运行时会出错。这次出现过一些这样的错误,希望在以后的设计中仔细认真,尽量避免这样的细节错误。 这次训练使我对以前学的知识得到了进一步的巩固和加深,特别是链表存储结构中指针的灵活运用。还有就是对输入数据的存储,这是第一次尝试,感觉有点困难,不过最终还是弄懂了。 这次设计我的体会是,学习一门编程语言,仅仅靠掌握概念性的知识是远远不够,更重

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论