编译原理课程设计--IF-ELSE条件语句的翻译程序设计 下载本文

内容发布更新时间 : 2024/5/3 21:02:17星期一 下面是文章的全部内容请认真阅读。

课程设计任务书

学生姓名:_____ 专业班级:

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

题目: IF-ELSE条件语句的翻译程序设计(简单优先法、输出四元式) 初始条件:

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

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

设计。

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

(1) 写出符合给定的语法分析方法的文法及属性文法。 (2) 完成题目要求的中间代码四元式的描述。

(3) 写出给定的语法分析方法的思想,完成语法分析和语义分析程序设计。 (4) 编制好分析程序后,设计若干用例,上机测试并通过所设计的分析程序。 (5) 设计报告格式按附件要求书写。课程设计报告书正文的内容应包括:

1 系统描述(问题域描述); 2 文法及属性文法的描述;

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

4 按给定的题目给出中间代码形式的描述及中间代码序列的结构设计; 5 编译系统的概要设计;

6 详细的算法描述(流程图或伪代码); 7 软件的测试方法和测试结果;

8 研制报告(研制过程,本设计的评价、特点、不足、收获与体会等); 9 参考文献(按公开发表的规范书写)。

时间安排:

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

周3、周4:完成程序调试及测试。 周5:撰写课程设计报告。

设计验收安排:设计周的星期五第1节课开始到实验室进行上机验收。 设计报告书收取时间:设计周的次周星期一上午10点。

指导教师签名: 2012年 10月 23日 系主任(或责任教师)签名: 2012年 10月 23日

1

IF-ELSE条件语句的翻译程序设计

(简单优先法、输出四元式)

1系统描述

1.1实验目的

对条件语句:IF <布尔表达式> THEN <赋值语句> ELSE <赋值语句> (1) 按给定的题目写出符合语法分析方法要求的文法和属性文法描述。 (2) 按给定的题目给出语法分析方法的思想及分析表的设计。 (3) 按给定题目给出中间代码序列的结构设计。

(4) 完成相应的词法分析、语法分析和语义分析程序设计。

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

1.2开发平台

Visual C++ 6.0、Windows XP

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

(1) S->if E then B else B (2) E->(A>A) (3) E->(A(A) (5) A->d (6) A->num (7) B->{d=C} (8) C->A+A (9) C->A-A (10) C->A*A (11) C->A/A (12) C->A

其中,d代表变量,num代表常量(这里仅限数字),E布尔表达式,B为赋值表达式,C为算术表达式

2.2属性文法描述

(1)E->A rop A’ {E.true=nextstat;

E.codebegin=nextstat; E.false=nextstat+1;

emit(“if” A.place “rop” A’.place “goto” -); emit(“goto” -)}

(2)E->(A) {E.place=A.place}

2

(3)A->id

{p=lookup(id.name); if p!=null then

A.place=p

else error}

(4)B->{d=C} {d.place=C.place} (5)C->A op A’ {C.place=newtemp;

emit(C.place “=” A.place “op” A’.place)}

(6)C->A {C.place=A.place}

注:rop为>或<;op为+、-、*或/

3语义分析方法的描述及分析表设计 3.1优先关系定义

X=Y 表示X和Y的优先关系相等 X>Y 表示X的优先性比Y的优先性大 X

(1)X=Y 当且仅当G中存在产生式规则A->?XY?

(2)X>Y 当且仅当G中存在产生式规则A->?XB?,B=>Y?,B≠Y

(3)X?BD?,B=>?X,B≠X,D=>Y?

3.2简单优先文法定义

若一个文法是简单优先文法必须满足以下条件:

(1) 在文法符号集V中,任意两个符号之间最多只有一种优先关系成立 (2) 在文法中任意两个产生式没有相同的右部

其中第一条是必须满足的,第二条若不满足则会导致规约不唯一。

3.3简单优先文法的算法步骤

首先根据已知优先文法构造相应优先关系矩阵,并将文法的产生式保存,设置符号栈S,算法步骤如下:

(1) 将输入符号串a1,a2?aN#依次逐个存入符号栈S中,直到遇到栈顶符号ai

的优先性>下一个带输入符号aj时为止。

(2) 栈顶当前符号ai为句柄尾,由此向左在栈中找句柄的头符号ak,即找到

ak-1

(3) 由句柄ak?ai在文法产生式中查找右部为ak?ai的产生式,若找到则用

相应左部代替句柄,若找不到则为出错,这是可以判定输入串不是该文法的句子。 (4) 重复上述(1)(2)(3)步骤直到规约完输入符号串,栈中只剩下文法的开

始符号为止。

3.4语义分析方法描述

语义分析采用基于属性文法的翻译方案,即,在语法分析过程中每进行一次规约操作则对对应产生式进行语义计算。

3