《编译原理》期末大作业

《编译原理》期末大作业

ID:9866577

大小:600.50 KB

页数:30页

时间:2018-05-12

《编译原理》期末大作业_第1页
《编译原理》期末大作业_第2页
《编译原理》期末大作业_第3页
《编译原理》期末大作业_第4页
《编译原理》期末大作业_第5页
资源描述:

《《编译原理》期末大作业》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、《编译原理》期末大作业班级:姓名:学号:班内序号:时间:1、1、实验内容某程序设计语言子集编译器的设计与实现,包括词法分析、语法分析、语义分析和目标代码生成的设计与实现。2、实验目的(1)理解编译器的工作机制(2)掌握编译器的构造方法3、所实现语言的完整文法G[<程序>]:<程序>→program<标识符>;<语句序列>.<语句序列>→<语句>;<语句序列>

2、ε<语句>→<定义语句>

3、<赋值语句>

4、<循环语句>

5、<条件语句>

6、<输入语句>

7、<输出语句><定义语句>→int<标识符><赋值语句>→<标识符>=<表达式><循环语句>→while(<表达式>){<语句序列>}<条件语句

8、>→if(<表达式>){<语句序列>}else{<语句序列>}<输入语句>→scanf(<标识符>)<输出语句>→printf(<标识符>)<表达式>→<标识符><运算符><标识符>

9、<无符号整数><标识符>→<字母>

10、<标识符><字母>

11、<标识符><数字><字母>→a

12、b

13、c

14、d

15、e

16、f

17、g

18、h

19、i

20、j

21、k

22、l

23、m

24、n

25、o

26、p

27、q

28、r

29、s

30、t

31、u

32、v

33、w

34、x

35、y

36、z<无符号整数>→0

37、1

38、2

39、3

40、4

41、5

42、6

43、7

44、8

45、9<运算符>→=

46、==

47、#

48、<

49、>

50、+

51、-

52、*

53、/4、总体设计5、详细设计285.1词法分析单词分类表:1)keyword(关键字):program

54、int

55、sca

56、nf

57、printf

58、while

59、if

60、else2)identification(标识符):a

61、b

62、c

63、……3)digit(数据):0

64、1

65、2

66、3

67、4

68、……4)operatorsign(运算符):=

69、==

70、#

71、<

72、>

73、+

74、-

75、*

76、/5)boundarysign(界符):{}

77、()

78、;符号表:1Keywordprogram2Identificationa3Boundarysign;4Boundarysign{5Keywordint6Identificationi……词法分析框图:28词法分析运行界面:输入“1”以后运行词法分析界面如下:5.2语法分析文法:S→programD;E.E

79、→F;E

80、εF→L

81、M

82、N

83、O

84、P

85、QL→intDM→D=GN→while(G){E}O→if(G){E}else{E}P→scanf(D)Q→printf(D)G→DCD2

86、BD→AD2→AA→a

87、b

88、c

89、d

90、e

91、f

92、g

93、h

94、i

95、j

96、k

97、l

98、m

99、n

100、o

101、p

102、q

103、r

104、s

105、t

106、u

107、v

108、w

109、x

110、y

111、zB→0

112、1

113、2

114、3

115、4

116、5

117、6

118、7

119、8

120、9C→=

121、==

122、#

123、<

124、>

125、+

126、-

127、*

128、/28First集、Follow集:非终结符First集Follow集Sprogram#Aa、b、c、……a、b、c……B0、1、2……0、1、2……C+、-、*、/……+、-、*……Da、b、c……)、=、

129、a、b、c……D2a、b、c……)、=、a、b、c……Eint、a…、while(、if(、scanf(、printf(、ε;、.、}Fint、a…、while(、if(、scanf(、printf(;Lint;Ma、b、c……;Nwhile(;Oif(;Pscanf(;Qprintf(;Ga、b、c、d、e……0、1、2、3……a、b、c……0、1、2……28预测分析表:programa……0……+……intS→programD;E.A→a…B→0…C→+…D→aD2→aE→F;E→F;EF→M→LL→intDMNOPQG→DCD2→Bscanfprintfwhileif#SA

130、BCDD2E→F;E→F;E→F;E→F;E→εF→P→Q→N→OLMN→while(G){E}O→if(G){E}else{E}P→scanf(D)Q→printf(D)G28语法分析框图:语法分析运行界面:28输入“2”以后运行词法分析界面如下:语句举例:包含while语句:28包含if语句:5.3语义分析实现目标:对每一个赋值表达式,判断运算符的优先级,然后输出四元式。输出形式:例如,输入a=b+(c-d)*e+f/g*(h-i+j/(k+l*m-n))将会输出(1)(-,c,d,t1)(2)(*,t1,e,t2)(3)(+,b,t2,t3)(4)(/,f,g,t4)(5)

131、(-,h,i,t5)(6)(*,l,m,t6)(7)(+,k,t6,t7)(8)(-,t7,n,t8)28(9)(/,j,t8,t9)(10)(+,t5,t9,t10)(11)(*,t4,t10,t11)(12)(+,t3,t11,t12)(13)(=,t12,-,a)语义分析步骤:1)检查输入的元素;2)如果是一个操作数,则进栈;3)如果是操作符,则如果符号栈不为空或者此操作符的优先级大于符号栈栈顶的优先级,则将此运算符压栈;如果符号栈不为空或者此操作符的优先级小于符号栈栈顶的

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

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

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