WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
学生姓名:赵旭林专业班级:计算机0801班
指导教师:陈天煌工作单位:计算机科学与技术学院
题目: WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)初始条件:
理论:学完编译课程,掌握一种计算机高级语言的使用。
实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
(1)写出符合给定的语法分析方法的文法及属性文法。
(2)完成题目要求的中间代码三地址表示的描述。
(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。
(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:
1 系统描述(问题域描述);
2 文法及属性文法的描述;
3 语法分析方法描述及语法分析表设计;
4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;
5 编译系统的概要设计;
6 详细的算法描述(流程图或伪代码);
7 软件的测试方法和测试结果;
8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);
9 参考文献(按公开发表的规范书写)。
时间安排:
设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试及测试。
周5:撰写课程设计报告。
设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。
设计报告书收取时间:设计周的次周星期一上午10点。
指导教师签名: 2010年 11月 13日
系主任(或责任教师)签名: 2010年 11月 13日
编译原理课程设计
——WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)
1、系统要求及描述
1.1 实验要求
1.目的
通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
2.设计内容及要求
对循环语句: WHILE〈表达式〉DO〈赋值语句〉
(1)按给定的题目写出符合自身语法分析方法要求的文法和属性文法描述。
(2)按给定的题目给出语法分析方法的思想及分析表设计。
(3)按给定的题目给出中间代码序列的结构设计。
(4)完成相应的词法分析、语法分析和语义分析程序设计。
(5)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。
1.2 递归下降法原理
递归子程序法是一种确定的自顶向下的语法分析方法。
它的主要原理是,对每个非终极符按其产生式结构构造相应语法分析子程序,每个过程的功能是识别由该非终结符推出的串,当某非终结符的产生式有多个候选项时,能够按LL(1)的形式可唯一确定某个候选式进行推导。其中终极符产生匹配命令,而非终极符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归下降法。其中子程序的结构与产生式结构几乎是一致的。
缺点:对文法要求高,必须满足LL(1)文法,如果某个产生式的推导不满足LL(1)而满足LL(2)时,也可采用多向前扫描一个符号的办法。另一个缺点是:由于递归调用过多,所以速度慢,占用空间多。
1.3三地址码具体形式
三地码形式如下:X:= y op z
条件语句while(A) do B翻译成:
Begin:
1.if Agoto 3
2.goto exit
3.do B
4.gotobegin
exit
2、系统设计及说明
2.1 系统设计及流程图
2.1.1 文法设计
while语句文法设计为:
S -> while (A) S | i=E;
A ->
B op B || B
Op ->&& | ||
B -> E relop E
relop ->< | == | > | >= | <=
E -> E+E | E-E | E*E | E/E | (E) | i | n
由于文法左递归,而递归下降法的基本要求是文法必须是LL(1)文法,不能有左递归,所以将文法消除左递归得:
S -> while (A) S | i=E;
A ->
B | B op B
Op ->&& | ||
B -> E relop E
relop ->= |<| >| == | >= | <=
E -> (E)
F | iF | nF
F -> +EF | -EF | *EF | /EF | ε
2.1.2属性文法设计
2.1.3系统流程图
2.2伪代码设计及分析
2.2.1 数据结构说明
源文件为source.txt,词法分析结果存放在lex.txt,三地址码存放在syntax.txt中。每个文件都有相对应的输入输出流来实现文件中数据的读取与保存。
结构体word用在词法分析中,用于保存单词的属性值和类型。KeyWord数组用于保存关键字,对应有一个函数iskeyword()判断是否是关键字。
2.2.2 词法分析设计与实现
在程序中,词法分析的部分是直接用实验一的程序。但要注意的问题是,由于在做实验一的时候没有考虑到代码重用问题,所以整个程序显得比较凌乱,和课程设计要求不太符合,所以在重用代码的时候修改了一下,使之更加符合课程设计程序的整体要求。
2.2.3语法分析设计与实现
由于递归下降法是一种自顶向下的语法分析方法,所以在判断给出的句子语法是否正确时是用文法的开始符号推导出句子,如果推导成功,那么给定的句子语法正确,如果不成功,那么说明有语法错误。
每个非终结符的伪代码设计如下:
1.S的子程序的伪代码:
int S()
{取单词;
if (str是"while"关键字)
{取下一次单词;
if (str == "(")
{ 调用非终结符A的子程序;取下一次单词;
if (str == ")")
{调用A()的子程序;
}}
else{while后面应该有"(", 返回; }