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

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

ID:14536771

大小:89.00 KB

页数:13页

时间:2018-07-29

while循环语句的翻译程序设计_第1页
while循环语句的翻译程序设计_第2页
while循环语句的翻译程序设计_第3页
while循环语句的翻译程序设计_第4页
while循环语句的翻译程序设计_第5页
资源描述:

《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语法分析方法描述按照递归下降分析技术,递归下降识别程序是由一组子程序组成,每个子程序对应于一个非终结符号。该子程序处理相应句型中相对于此非终结符号的产生式。在定义文法时,是递归定义的,所以这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。