- 9
- 0
- 约1.7万字
- 约 19页
- 2019-10-24 发布于山西
- 举报
武汉理工大学《编译原理》课程设计
PAGE 18
目录
1 问题域描述3
2 文法及属性文法的描述3
2.1 WHILE循环语句的文法3
2.2 WHILE循环语句的属性文法4
3 语法分析方法及中间代码形式的描述4
3.1语法分析方法4
3.2中间代码形式描述6
4 编译系统的概要设计7
4.1词法分析7
4.2语法制导翻译8
5 详细的算法描述8
5.1 文法设计8
5.2 算法描述8
5.3 源程序代码9
6 软件的调试过程和结果测试19
6.1调试过程19
6.2结果测试19
7 使用说明20
8 课设总结20
9 参考文献22
WHILE循环语句的翻译程序设计
(简单优先法、输出三地址表示)
1 问题域描述
while循环语句的翻译程序设计(简单优先法,输出单地址表示),要求完成:
用C++语言正确编写程序,完成WHILE循环语句的翻译程序设计。
求能正确进行词法分析,语法分析,并能正确的输出预期结果。
根据指定的文法,判定程序的正确性。
本次课程设计中要求设计一个WHILE循环语句的词法﹑语法及语义分析程序,语法分析选择简单优先法,采用语法制导翻译输出中间代码三元式。通过设计、编制、调试一个 WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,实现功能。
while循环语句的格式为:while(P){do A},其中A为循环体,可为一个或多个赋值语句;P为循环控制条件。while循环语句首先根据循环控制条件P进行判断,若满足条件则执行循环体A,否则执行下面的程序段;
本次课程设计中系统首先要进行词法分析,即从左到右把源文件的字符序列逐个进行扫描,产生一个个的单词序列,作为语法分析的输入从而继续编译过程。
该程序的语法分析读入词法分析的结果,并判断输入语句是否满足while循环语句的文法所描述的形式。通过简单优先法对语句进行分析,看是否能通过给定的输入串归约到文法的开始符号。在语法分析的同时进行语义分析,最后输出三元式的代码。
2 文法及属性文法的描述
2.1WHILE循环语句的文法
定义一个文法,文法G(S)如下:
S- while(P){A};
A-id=E;
E-TE
E-+TE | -TE | e
T-FT
T-*FT | /FT | e
F-(E) | id
P-E rop id
rop- | | = | = | != | ==
2.2 WHILE循环语句的属性文法
产生式
语义规则
S→while P{A}
S.addr:=newlabel;
E.true:=newlabel;
E.false:=S.next;
S1.next:=S.begin;
S.code:=gen(S.begin’:’‖E。code‖
gen(E.true’:’) ‖S1.code‖
gen(‘goto’ S.begin)
3 语法分析方法及中间代码形式的描述
3.1语法分析方法
3.1.1简单优先法
简单优先分析法是按照文法符号(终结符和非终结)的优先关系确定句柄的,因此我们首先介绍任意两个文法符号之间的优先关系是怎样确定的,及如何构造优先关系表。
首先定义优先关系的表示:
X=Y 表示X和Y的优先关系相等
XY 表示X的优先性比Y的优先性大
XY 表示X的优先性比Y的优先性小
这样我们就可对已知文法中的任意两个文法符号X,Y按其在举行中可能会出现的相邻关系确定他们的优先关系。
3.1.2简单优先法的缺点
对文法的要求高,而且也要把文法符号的关系首先表示出来,这普遍性不是太好。
{/** S w h i l e E d o { B }a = + 1 ; ( b c ) # **/
/* S */ { N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, 1 },
/* w/ { N, N, 0, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N },
/* h*/ { N, N, N, 0, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N, N },
/* i/ { N, N, N, N, 0, N, N, N, N, N, N, N, N,
原创力文档

文档评论(0)