欢迎来到天天文库
浏览记录
ID:8906722
大小:566.00 KB
页数:27页
时间:2018-04-11
《编译原理课程实验报告示例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1完成日期:2007-6-20指导老师:蒋宗礼04070010张悦编译原理实验报告04070010张悦2<一>词法的正规式描述标识符:<字母>
2、(<字母>
3、<数字字符>)*(ε
4、_
5、.)(<字母>
6、<数字字符>)*十进制数:(0
7、(1
8、2
9、3
10、4
11、5
12、6
13、7
14、8
15、9)(0
16、1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9)*)(ε
25、.)(0
26、1
27、2
28、3
29、4
30、5
31、6
32、7
33、8
34、9)五.系统实现(一)词法分析器的实现四.系统设计完成整个系统,实现本个实验的要求,需要两个比较大的模块:词法分析器和语法分析器。词法分析器的功能是将输入的程序串分解成一个一个
35、独立的单词,并且记录下每个单词的类型以及数值。这里词法分析器的实现有两种方法:调用一次词法分析器,返回一个词的类型以及数值,以此类推;还有一种方法是条用一次词法分析器将程序串的所有单词都分解出来并保存到一个地方(比如线形表)以便将来使用。我采用的是前者,因为这样只需要对整个程序访问一遍语法分析器的功能是将已经分解好的单词按照一定的规范(产生式)组合起来,由此来确定输入程序的意思。我的设计是“语法分析器调用词法分析器”,当语法分析其分析进行不下去的时候调用词法分析器获取一个单词,继续进行分析。而语义功能是镶嵌在语法分析其当中的,当语法
36、分析器分析出用什么产生式的时候作相应的语义处理。3.编写测试程序,反复调用函数scan(),输出单词种别和属性。4.改写文法,构造语法分析程序,要求按照最左派生的顺序输出派生的产生式序列;5.改写语法分析程序,构造三地址代码生成程序。6.处理的源程序存放在文件中,它可以包含多个语句;从键盘读入数据,分析出一个单词。返回单词种别(用整数表示),返回单词属性(不同的属性可以放在不同的全局变量中)。1)2)3)三.实验要求1.编制正规式以及正规文法,画出状态图;2.根据状态图,设计词法分析函数intscan(),完成以下功能:二.实验内容
37、1.编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。2.用二维预约分析表,编制一个能够进行语法分析并生成派生的产生式序列的编译程序。3.用递归子程序法,编制一个能够进行语法分析并生成三地址代码的微型编译程序。一.实验目的基本掌握计算机语言的词法分析程序的开发方法。以及掌握计算机语言的语法分析程序设计与属性文法应用的实现方法。锻炼自己的编程能力和逻辑思维能力,体会计算机编译器的奥妙之处04070010张悦3<三>、状态图:>->a
38、b
39、c
40、d
41、e
42、f
43、g
44、i
45、j
46、k
47、l
48、m
49、n
50、o
51、p
52、q
53、r
54、s
55、t
56、u
57、v
58、
59、w
60、x
61、y
62、z
63、A
64、B
65、C
66、D
67、E
68、F
69、G
70、H
71、I
72、J
73、K
74、L
75、M
76、N
77、O
78、P
79、Q
80、R
81、S
82、T
83、U
84、V
85、W
86、X
87、Y
88、Z<数字字符>->0
89、1
90、2
91、3
92、4
93、5
94、6
95、7
96、8
97、9->(<字母>
98、<数字字符>)
99、ε->(ε
100、_
101、.)->(ε
102、.)->(0
103、1
104、2
105、3
106、4
107、5
108、6
109、7)
110、ε->(0
111、1
112、2
113、3
114、4
115、5
116、6
117、7
118、8
119、9
120、a
121、b
122、c
123、d
124、e
125、f)
126、ε将状态合起来,得:(0)-><1~9>(1)
127、0(4)
128、<字母>(12)
129、<
130、运算符和分隔符>(17)(1)-><0~9>(1)
131、.(2)(2)-><0~9>(3)(3)-><0~9>(3)(4)->.(2)
132、<1~7>(5)
133、0(13)
134、x(8)
135、X(8)(5)-><0~7>(5)
136、.(6)(6)-><0~7>(7)(7)-><0~7>(7)(8)-><1~9>(9)
137、(9)
138、0(14)(9)-><0~9>(9)
139、(9)
140、.(10)(10)-><0~9>(11)
141、(11)(11)-><0~9>(11)
142、(11)(12)-><0~9>(12)
143、(12)
144、145、Z>(12)146、.(15)147、_(15)(13)->.(6)(14)->.(10)(15)-><0~9>(16)148、(16)149、(16)(16)-><0~9>(16)150、(16)151、(16)<母字<二>、改变后的正规文法<标识符>-><字母><十进制整数>-><数字字符><数字字符><八进制整数>->0<十六进制整数>->0x<运算符和分隔符>->+152、-153、*154、/155、>156、<157、158、=159、(160、)161、;<关键字>->if162、then163、else164、while165、do(0166、1167、2168、3169、4170、5171、6172、7173、8174、9)*八进制数:0(0175、(1176、2177、3178、4179、5180、6181、7)(0182、1183、2184、3185、4186、5187、6188、7)*)(ε189、.)(0190、1191、2192、3193、4194、5
145、Z>(12)
146、.(15)
147、_(15)(13)->.(6)(14)->.(10)(15)-><0~9>(16)
148、(16)
149、(16)(16)-><0~9>(16)
150、(16)
151、(16)<母字<二>、改变后的正规文法<标识符>-><字母><十进制整数>-><数字字符><数字字符><八进制整数>->0<十六进制整数>->0x<运算符和分隔符>->+
152、-
153、*
154、/
155、>
156、<
157、
158、=
159、(
160、)
161、;<关键字>->if
162、then
163、else
164、while
165、do(0
166、1
167、2
168、3
169、4
170、5
171、6
172、7
173、8
174、9)*八进制数:0(0
175、(1
176、2
177、3
178、4
179、5
180、6
181、7)(0
182、1
183、2
184、3
185、4
186、5
187、6
188、7)*)(ε
189、.)(0
190、1
191、2
192、3
193、4
194、5
此文档下载收益归作者所有