欢迎来到天天文库
浏览记录
ID:38232602
大小:178.11 KB
页数:14页
时间:2019-06-07
《WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、武汉理工大学《编译原理》课程设计课程设计任务书学生姓名:赵旭林专业班级:计算机0801班指导教师:陈天煌工作单位:计算机科学与技术学院题目:WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件:理论:学完编译课程,掌握一种计算机高级语言的使用。实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)(1)写出符合给定的语法分析方法的文法及属性文法。(2)完成题目要求的中间代码三地址表示的描述。(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。(4)编制好分析
2、程序后,设计若干用例,上机测试并通过所设计的分析程序。(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1系统描述(问题域描述);2文法及属性文法的描述;3语法分析方法描述及语法分析表设计;4按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;5编译系统的概要设计;6详细的算法描述(流程图或伪代码);7软件的测试方法和测试结果;8研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);9参考文献(按公开发表的规范书写)。时间安排:设计安排一周:周1、周2:完成系统分析及设计。周3、周4:完成程序调试及测试。周5:撰写课程设计报告。设计验收安排:设计周的星期五第1
3、节课开始到实验室进行上机验收。设计报告书收取时间:设计周的次周星期一上午10点。指导教师签名:2010年11月13日系主任(或责任教师)签名:2010年11月13日14武汉理工大学《编译原理》课程设计编译原理课程设计——WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)1、系统要求及描述1.1实验要求1.目的通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。2.设计内容及要求对循环语句:WHILE〈表达式〉DO〈赋值语句〉(1)按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。
4、(2)按给定的题目给出语法分析方法的思想及分析表设计。(3)按给定的题目给出中间代码序列的结构设计。(4)完成相应的词法分析、语法分析和语义分析程序设计。(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。1.2递归下降法原理递归子程序法是一种确定的自顶向下的语法分析方法。它的主要原理是,对每个非终极符按其产生式结构构造相应语法分析子程序,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选项时,能够按LL(1)的形式可唯一确定某个候选式进行推导。其中终极符产生匹配命令,而非终极符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程
5、序下降法或递归下降法。其中子程序的结构与产生式结构几乎是一致的。14武汉理工大学《编译原理》课程设计缺点:对文法要求高,必须满足LL(1)文法,如果某个产生式的推导不满足LL(1)而满足LL(2)时,也可采用多向前扫描一个符号的办法。另一个缺点是:由于递归调用过多,所以速度慢,占用空间多。1.3三地址码具体形式三地码形式如下:X:=yopz条件语句while(A)doB翻译成:Begin:1.ifAgoto32.gotoexit3.doB4.gotobeginexit2、系统设计及说明2.1系统设计及流程图2.1.1文法设计while语句文法设计为:S->while(A)S
6、i=E;A->B
7、opB
8、
9、BOp->&&
10、
11、
12、B->ErelopErelop-><
13、==
14、>
15、>=
16、<=E->E+E
17、E-E
18、E*E
19、E/E
20、(E)
21、i
22、n由于文法左递归,而递归下降法的基本要求是文法必须是LL(1)文法,不能有左递归,所以将文法消除左递归得:14武汉理工大学《编译原理》课程设计S->while(A)S
23、i=E;A->B
24、BopBOp->&&
25、
26、
27、B->ErelopErelop->=
28、<
29、>
30、==
31、>=
32、<=E->(E)F
33、iF
34、nFF->+EF
35、-EF
36、*EF
37、/EF
38、ε2.1.2属性文法设计产生式属性文法S->while(B)S1S.begin:=newlabel;S.next:=new
39、label;B.true:=newlabel;B.false:=S.next;S1.next:=S.begin;S.code:=gen(S.begin,‘:’)
40、
41、B.code
42、
43、gen(S.true,‘:’)
44、
45、S1.code
46、
47、gen(‘goto’,S.begin)
48、
49、gen(B.false,‘:’)
50、
51、gen(‘gotoLnext’);B->E1relopE2B.place:=newlabel;B.co
此文档下载收益归作者所有