欢迎来到天天文库
浏览记录
ID:61487330
大小:176.82 KB
页数:24页
时间:2021-02-05
《编译原理 实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、编译原理实验报告指导教师:一.实验目的基本掌握计算机语言的词法分析程序的开发方法。以及掌握计算机语言的语法分析程序设计与属性文法应用的实现方法。锻炼自己的编程能力和逻辑思维能力,体会计算机编译器的奥妙之处二.实验内容1.编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。2.给定下列文法: S→id=E; S→ifCthenS S→whileCdoS C→E>E C→E<=E 用递归子程序法设计并实现语法分析程序,按照生成顺序输出产生式3.在第四章上机题的基础上,补充以下的语义处理功能,形成一个将源程序翻译成三地址代码序列的翻译程
2、序: 将表达式、赋值语句翻译成三地址代码 将If条件语句、While循环语句翻译成三地址代码三.实验要求1.编制正规式以及正规文法,画出状态图;2.根据状态图,设计词法分析函数intscan(),完成以下功能:1)从键盘读入数据,分析出一个单词。2)返回单词种别(用整数表示),3)返回单词属性(不同的属性可以放在不同的全局变量中)。3.编写测试程序,反复调用函数scan(),输出单词种别和属性。4.改写文法,构造语法分析程序,要求按照最左派生的顺序输出派生的产生式序列;5.改写语法分析程序,构造三地址代码生成程序。6.处理的源程序存放在文件中,它可以
3、包含多个语句;四.系统设计完成整个系统,实现本个实验的要求,需要两个比较大的模块:词法分析器和语法分析器。词法分析器的功能是将输入的程序串分解成一个一个独立的单词,并且记录下每个单词的类型以及数值。这里词法分析器的实现有两种方法:调用一次词法分析器,返回一个词的类型以及数值,以此类推;还有一种方法是条用一次词法分析器将程序串的所有单词都分解出来并保存到一个地方(比如线形表)以便将来使用。我采用的是前者,因为这样只需要对整个程序访问一遍语法分析器的功能是将已经分解好的单词按照一定的规范(产生式)组合起来,由此来确定输入程序的意思。我的设计是“语法分析器
4、调用词法分析器”,当语法分析其分析进行不下去的时候调用词法分析器获取一个单词,继续进行分析。而语义功能是镶嵌在语法分析其当中的,当语法分析器分析出用什么产生式的时候作相应的语义处理。五.系统实现词法分析器的实现<一>词法的正规式描述标识符:<字母>
5、(<字母>
6、<数字字符>)*(ε
7、_
8、.)(<字母>
9、<数字字符>)*十进制数:(0
10、(1
11、2
12、3
13、4
14、5
15、6
16、7
17、8
18、9)(0
19、1
20、2
21、3
22、4
23、5
24、6
25、7
26、8
27、9)*)(ε
28、.)(0
29、1
30、2
31、3
32、4
33、5
34、6
35、7
36、8
37、9)(0
38、1
39、2
40、3
41、4
42、5
43、6
44、7
45、8
46、9)*八进制数:0(0
47、(1
48、2
49、3
50、4
51、5
52、
53、6
54、7)(0
55、1
56、2
57、3
58、4
59、5
60、6
61、7)*)(ε
62、.)(0
63、1
64、2
65、3
66、4
67、5
68、6
69、7)(0
70、1
71、2
72、3
73、4
74、5
75、6
76、7)*十六进制数:0x(0(
77、1
78、2
79、3
80、4
81、5
82、6
83、7
84、8
85、9
86、a
87、b
88、c
89、d
90、e
91、f)(0
92、1
93、2
94、3
95、4
96、5
97、6
98、7
99、8
100、9
101、a
102、b
103、c
104、d
105、e
106、f)*)(ε
107、.)(0
108、1
109、2
110、3
111、4
112、5
113、6
114、7
115、8
116、9
117、a
118、b
119、c
120、d
121、e
122、f)(0
123、1
124、2
125、3
126、4
127、5
128、6
129、7
130、8
131、9
132、a
133、b
134、c
135、d
136、e
137、f)*运算符和分隔符:+-*/<>=();关键字:ifthenelsewhiledo<二>、改变后的正规文法<标识符>-><字母>138、p><十进制整数>-><数字字符><数字字符><八进制整数>->0<十六进制整数>->0x<运算符和分隔符>->+139、-140、*141、/142、>143、<144、=145、(146、)147、;<关键字>->if148、then149、else150、while151、do<字母>->a152、b153、c154、d155、e156、f157、g158、i159、j160、k161、l162、m163、n164、o165、p166、q167、r168、s169、t170、u171、v172、w173、x174、y175、z176、A177、B178、C179、D180、E181、F182、G183、H184、I185、J186、K187、L188、M189、N190、O191、P192、Q193、R194、S195、T196、U197、V198、W199、X200、Y201、Z<数字字符>202、->0203、1204、2205、3206、4207、5208、6209、7210、8211、9->(<字母>212、<数字字符>)213、ε->(ε214、_215、.)->(ε216、.)->(0217、1218、2219、3220、4221、5222、6223、7)224、ε->(0225、1226、2227、3228、4229、5230、6231、7232、8233、9234、a235、b236、c237、d238、e239、f)240、ε将状态合起来,得:(0)-><1~9>(1)241、0(4)242、<字母>(12)243、<运算符和分隔符>(17)(1)-><0~9>(1)244、.(2)(2)-><0~9>(3)(3)-><0~9>(3)(4)->.(2)245、<1~7>(5)246、247、0(13)248、x(8)249、X(8)(5)-><0~7>(5)250、.(6)(6)-><0~7>(7)(7)-><0
138、p><十进制整数>-><数字字符><数字字符><八进制整数>->0<十六进制整数>->0x<运算符和分隔符>->+
139、-
140、*
141、/
142、>
143、<
144、=
145、(
146、)
147、;<关键字>->if
148、then
149、else
150、while
151、do<字母>->a
152、b
153、c
154、d
155、e
156、f
157、g
158、i
159、j
160、k
161、l
162、m
163、n
164、o
165、p
166、q
167、r
168、s
169、t
170、u
171、v
172、w
173、x
174、y
175、z
176、A
177、B
178、C
179、D
180、E
181、F
182、G
183、H
184、I
185、J
186、K
187、L
188、M
189、N
190、O
191、P
192、Q
193、R
194、S
195、T
196、U
197、V
198、W
199、X
200、Y
201、Z<数字字符>
202、->0
203、1
204、2
205、3
206、4
207、5
208、6
209、7
210、8
211、9->(<字母>
212、<数字字符>)
213、ε->(ε
214、_
215、.)->(ε
216、.)->(0
217、1
218、2
219、3
220、4
221、5
222、6
223、7)
224、ε->(0
225、1
226、2
227、3
228、4
229、5
230、6
231、7
232、8
233、9
234、a
235、b
236、c
237、d
238、e
239、f)
240、ε将状态合起来,得:(0)-><1~9>(1)
241、0(4)
242、<字母>(12)
243、<运算符和分隔符>(17)(1)-><0~9>(1)
244、.(2)(2)-><0~9>(3)(3)-><0~9>(3)(4)->.(2)
245、<1~7>(5)
246、
247、0(13)
248、x(8)
249、X(8)(5)-><0~7>(5)
250、.(6)(6)-><0~7>(7)(7)-><0
此文档下载收益归作者所有