资源描述:
《while循环语句的翻译程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、《编译原理》课程设计说明书WHILE循环语句的翻译程序设计(递归下降法、输出三地址表示)1系统描述按照课程设计的要求,写一个能识别while循环语句的文法,通过一定的变换使它符合递归下降法的要求,然后按照这个文法编写一个程序,该程序能识别输入的语句是否符合while语句的文法,或者能不能通过文法的开始符号推导出该语句。该程序应该包括词法分析器,能对输入的语句进行词法分析,然后再对结果进行语法分析。词法分析器应能识别关键字,标示符,常量,操作符等。该程序的语法分析器能对输入的语法进行分析,判断输入语句能否满足while循环
2、语句的文法。通过递归下降的方法对语句进行分析,看能否通过开始符号推导出来。该程序的语义分析器就是对分析结果进行输出,要求输出结果是三地址形式的。2文法及属性文法的描述2.1文法描述::=while(<条件表达式>)(<赋值语句>
3、)<条件表达式>::=(<标识符>
4、<无符号整数>)<条件运算符>(<标识符>
5、<无符号整数>)<标识符>::=<字母>(<字母>
6、<数字>)<条件运算符>::=>
7、<
8、=<无符号整数>::=<数字>(<数字>)<赋值语句>::=<标识符>=(<标识符>
9、<数
10、字>)<算术运算符>(<标识符>
11、<数字>)<算术运算符>::=+
12、-
13、*
14、/<赋值语句>::=<标识符>=<标识符>
15、<数字>2.2递归文法while语句文法:12《编译原理》课程设计说明书S->while(B)S
16、i=EB->ErelopErelop-><
17、=
18、>E->E+E
19、E-E
20、E*E
21、E/E
22、(E)
23、i
24、n在编写程序的时候用到的是递归下降法,而递归下降法对文法的要求是不能包含左递归,对上述的文法进行消除左递归之后,得到如下的递归文法:S->while(B)S
25、i=EB->ErelopErelop-><
26、=
27、>
28、E->(E)F
29、iF
30、nFF->+EF
31、-EF
32、*EF
33、/EF
34、ε2.3属性文法的描述产生式属性文法S->while(B)S1S.begin:=newlabel;S.next:=newlabel;B.true:=newlabel;B.false:=S.next;S1.next:=S.begin;S.code:=gen(S.begin,‘:’)
35、
36、B.code
37、
38、gen(S.true,‘:’)
39、
40、S1.code
41、
42、gen(‘goto’,S.begin)
43、
44、gen(B.false,‘:’)
45、
46、gen(‘gotoLnext’)
47、;B->E1relopE2B.place:=newlabel;B.code:=E1.code
48、
49、relop.code
50、
51、E2.code
52、
53、gen(B.place‘:=’,E1.place,relop.place,E2.place);relop-><
54、=
55、>relop.place:=newlabel;relop.code:=gen(‘<’)
56、
57、gen(‘=’)
58、
59、gen(‘>’);E->(E1)FE.place:=newlabel;12《编译原理》课程设计说明书E.code:=E1.code
60、
61、F.code
62、
63、gen(E.
64、place‘:=’,‘(’,E1.place,‘)’,F.place);E->iFE.palce:=newlabel;E.code:=i.code
65、
66、F.code
67、
68、gen(E.palce‘:=’,i.place,F.place);E->nFE.place:=newlabel;E.code:=n.code
69、
70、F.code
71、
72、gen(E.place‘:=’,n.place,F.place);F->+EF1F.place:=newlabel;F.code:=E.code
73、
74、F1.code
75、
76、gen(F.place‘:=+’,
77、E.place,F1.place);F->-EF1F.place:=newlabel;F.code:=E.code
78、
79、F1.code
80、
81、gen(F.place‘:=-’,E.place,F1.place);F->*EF1F.place:=newlabel;F.code:=E.code
82、
83、F1.code
84、
85、gen(F.place‘:=*’,E.place,F1.place);F->/EF1F.place:=newlabel;F.code:=E.code
86、
87、F1.code
88、
89、gen(F.place‘:=/’,E.place,
90、F1.place);F->εF.place:=newlabel;F.code:=gen(F.code‘:=ε’);图1属性文法3语法分析方法描述按照递归下降分析技术,递归下降识别程序是由一组子程序组成,每个子程序对应于一个非终结符号。该子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这