资源描述:
《《编译原理》期末大作业》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
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)如果是操作符,则如果符号栈不为空或者此操作符的优先级大于符号栈栈顶的优先级,则将此运算符压栈;如果符号栈不为空或者此操作符的优先级小于符号栈栈顶的