WHILE循环语句的翻译程序设计(递归下降法,输出四元式)

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

武汉理工大学《数据结构》课内实践报告

学号:0121210340314

课内实践报告

课程名称编译原理

WHILE 循环语句的翻译程序设计

设计题目

(递归下降法,输出四元式)学院计算机科学与技术

专业班级计算机1203班

姓名闵丹枫

指导教师林泓

2014年12月8 日

武汉理工大学《数据结构》课内实践报告

课程设计任务书

学生姓名:闵丹枫专业班级:计算机1203班

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

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

初始条件:

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

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

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

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

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

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

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

(5)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:1系统描述(问题域描述);

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

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

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

5编译系统的概要设计;

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

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

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

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

时间安排:

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

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

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

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

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

指导教师签名: 2014 年9月1日

WHILE循环语句的翻译程序设计(递归下降法、输出四元式)

一.系统描述

1.1问题描述

设计一个WHIL B布尔表达式〉DO〈赋值语句〉循环语句的词法、语法及语义分析程序,语法分析选择递归下降法,采用用语法制导翻译输出中间代码四元式。

1.2主要任务

设计一个能识别while循环语句的文法,消除左递归,使文法符合LL(1)文法。利用递归下降法编写一个集词法分析,语法分析和语义分析为一体的程序。该程序首先可以检查输入语句是否符合词法要求,若符合则继续识别输入的语句是否符合while语句的文法,若符

合则进行语义分析,输出用四地址代码表示的中间代码。

文法及属性文法的描述

2.1文法的描述

扩充巴科斯-瑙尔范式(EBNF :

vwhile语句> ::=while (< 条件语句>)do{ < 赋值语句> }

<条件语句> ::= < 表达式><条件运算符> < 表达式>

< 表达式> ::= < 表达式> + <表达式2> | < 表达式> - < 表达式2> | < 表达式2>

<表达式2>::=<表达式2> * <表达式3> |<表达式2> / <表达式3> | <表达式3>

<表达式3>::=(<表达式>)| <标识符>|<数字>

<赋值语句>::=< 标识符>=<表达式>;

根据以上写出来的While循环语句的文法表示如下:

1. S -> while (A) do {B}

2. A -> CDC

3. D -> > | = | < | >= |<=

4. C -> C+E | C-E | E

5. E -> E*F | E/F | E

6. F -> (C) | i | n

对以上文法消除左递归,最后得到的文法为:

1. S->while (A) do {B}

2. A->CDC

3. D-> > | = | < | >= | <=

4. C->EG

5. G->+EG | -EG | &

6. E->FH

7. H->*FH | / F H | &

8. F->(C) | i | n

9. B->i=C;

2.1属性文法的描述

(1)任一非终结符B都不是左递归的,否则会产生死循环。

⑵对 A 的任意两个右部B i , B j ,有:first( B i) A first( B j)= ©, First( B i)表B i所能导出串的第一个符号的集合。显然,每个 B i的first( B i)是互不相同的,否则则

无法判断应执行哪个( i )

C-->EG{C.PIace:=n ewtemp;

Emit(C.PIace':='E.PIace G.place)}

G->+EG{G.Place:=newtemp;

Emit(G1.Place':=''+'E.Place G2.place)}

G->-EG{G.Place:=newtemp;

Emit(G1.Place':=''-'E.Place G2.place)}

G-> £

{G.Place:=newtemp; Emit(G.Place':='''}

H->*FH{H.Place:=newtemp;

Emit(H1.Place':=''*'F.Place H2.place)}

H-> / FH{H.Place:=newtemp;

Emit(H1.Place':=''+'F.Place H2.place)}

H-> £{G.Place:=newtemp;

Emit(H1.Place':=''+'E.Place H2.place)}

F->(C){F.Place:=C.Place}

B->i=C;

{p:=lookup(i. name) If p!=nil the n Emit(p':='C.PIace Else

error)}

语法分析方法描述

3. 1语法分析方法描述

递归下降法是一种比较简单直观,易于构造的语法分析方法。他要求文法满足LL( 1) 文法,他的设计思想是对应文法中每个非终结符编写一个递归过程,每个过程的功能是识别由该非终结符推出的单词(或串),当某非终结符的产生式有多个候选时,能够按LL (1) 形式可唯一地确定选择某个候选进行推导。

它的优点是简单直观,易于构造,很多编译系统所实现

缺点是对文法要求很高,由于递归调用多,影响分析器的效率。

递归下降程序是由一组子程序组成,每个子程序对应于一个非终结(S,A,B,C,D,E,F,G,H) 每个子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这些子程序也是递归的。当一个子程序调用另一个子程序时,原子程序顺序执行语句,即总是先执行被调用的子程序,然后再执行后继的程序。程序中9个子程序,其中S是开始

符号,也是递归下降分析的入口,通过调用词法分析器进行单词分析,并通过

word=I.Yufa_Queue.fro nt() 来得到当前所分析到的单词,然后在递归语法分析中根据这个单词分析下一步要执行的子程序。其中要注意的是,当子程序G()和H()中出现匹配的是空字符串时,不做

相关文档
最新文档