WHILE循环语句的翻译程序设计(LR方法、输出四元式)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

课程设计任务书 (1)

1系统描述 (2)

2文法及属性文法描述 (2)

2.1文法的描述 (2)

2.2属性文法的描述 (2)

3语法分析方法描述及语法分析表设计 (2)

3.1语法分析表设计 (2)

3.1.1文法的DFA (3)

3.1.2LR(0)分析表 (4)

3.1.3LR(0)分析方法描述说明 (4)

4中间代码形式的描述及中间代码序列的结构设计 (4)

5编译系统的概要设计 (5)

5.1词法分析 (5)

5.2语法分析 (6)

5.3语法制导翻译 (7)

6详细的算法描述 (8)

7 软件的测试方法和测试结果 (14)

8小结与体会 (18)

9参考文献 (18)

本科生课程设计成绩评定表 (20)

课程设计任务书

学生姓名:王世创专业班级:计算机0909班

指导教师:高曙工作单位:计算机科学与技术学院

题目: WHILE循环语句的翻译程序设计(LR方法、输出四元式)

初始条件:

理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

(1)写出符合给定的语法分析方法的文法及属性文法。

(2)完成题目要求的中间代码四元式的描述。

(3)写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。

(4)编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。

(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:

1 系统描述(问题域描述);

2 文法及属性文法的描述;

3 语法分析方法描述及语法分析表设计;

4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计;

5 编译系统的概要设计;

6 详细的算法描述(流程图或伪代码);

7 软件的测试方法和测试结果;

8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等);

9 参考文献(按公开发表的规范书写)。

时间安排:

设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试及测试。

周5:撰写课程设计报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。

设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名: 2011年 12月 23日

系主任(或责任教师)签名: 2011年 12月 23日

1、系统描述

通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法

及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。用语法

制导完成语义分析,并将形成的中间代码以四元式的形式输出。

2 、文法及属性文法的描述

2.1 文法的描述

该文法的产生式如下所示:

(1)S->while(B){E}

(2)E->AE

(3)E->A

(4)A->iPA

(5)A->i

(6)B->iTi

(7)B->i

其中while、( 、) 、{ 、} 、P、T 、;和i均为终结符,而S、A、B、E这些大写字母均为非终结符。T表示比较运算符,P表示算术运算符,i表示合法标识符。

2.2 属性文法的描述

对该文法的属性文法描述如下:

(1) S->while(B){E}prinf(if B goto E else goto next)

(2) E->AE print(E.val = A.val·E.val)

(3) E->A print(E.val = A.val)

(4) A->i P A print(A= i.Val P A.Val)

(5) A->i; A.Val = i;

(6) B->i T i print(B = i1.Val T i2.Val)

(7) B->i B.Val = i

3 、语法分析方法描述及语法分析表设计

3.1 语法分析表设计3.1.1 文法的DFA

3.1.2 LR(0)分析表

3.1.2 LR(0)分析方法描述说明

LR分析法的规约过程是规范推到的逆过程,所以LR分析过程是一种规范规约的过程。其分析过程为:由文法构造出该文法项目集,再根据项目集构造该文法的DFA,再判断是否有移进-规约和规约-规约冲突,若没有冲突则该文法为LR(0)的,若有冲突则该文法是SLR(1)的,最后可以构造出LR(0)分析表。然后根据LR(0)分析表进行语法分析,分析过程就是进栈和规约的过程。若能规约出开始符S,则语法正确。反之,语法错误。

4 、中间代码形式的描述及中间代码序列的结构设计

本系统中所采用的中间代码形式是四元式,是一种比较普遍采用的形式。四元式的四个组成成分是:算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。

运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。

例如a:=b*c+b*d的四元式表示如下:

1)(*,b,c,t1)

2)(*,b,d,t2)

3)(+,t1,t2,t3)

4)(:=,t3,-,a)

四元式对中间结果的引用必须通过给定的名字,也就是说,四元式的联系是通过临时变量实现的。

将while( B rop C )goto L写成(jrop,B,C,L)

本程序中所用到的四元式语句如下:

1)形如(op,arg1,arg2,result)的赋值语句

2)形如(jrop,B,C,L)的条件转移语句

3)形如(=,arg1,-,result)的复写语句

5、编译系统的概要设计

5.1词法分析

词法分析程序要做的工作是:从源程序的第一个字符开始,顺序读字符,一次读一个,

根据所读进的字符识别各类单词,同时去掉源程序中的空白和注释。词法分析检查的错误主要是挑出源程序中出现的非法符号。所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中的错字。

流程图如下:

相关文档
最新文档