欢迎来到天天文库
浏览记录
ID:59793880
大小:47.00 KB
页数:10页
时间:2020-11-24
《编译原理实验-词法分析.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一词法分析有如下算术运算文法:1)E->E+T2)E->E-T3)E->T4)T->T*F5)T->T/F6)T->F7)F->(E)8)F->I9)I->十进制实数
2、十进制整数
3、十六进制实数
4、十六进制整数
5、八进制实数
6、八进制整数10)十进制实数->(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)*).(0
25、1
26、2
27、3
28、4
29、5
30、6
31、7
32、8
33、9)(0
34、1
35、2
36、3
37、4
38、5
39、6
40、7
41、8
42、9)*11)八进制实数->0(0
43、1
44、2
45、3
46、4
47、5
48、6
49、7)(0
50、1
51、2
52、3
53、4
54、5
55、6
56、7)*.(0
57、1
58、
59、2
60、3
61、4
62、5
63、6
64、7)(0
65、1
66、2
67、3
68、4
69、5
70、6
71、7)*12)十六进制实数->0x(0
72、1
73、2
74、3
75、4
76、5
77、6
78、7
79、8
80、9
81、a
82、b
83、c
84、d
85、e
86、f)(0
87、1
88、2
89、3
90、4
91、5
92、6
93、7
94、8
95、9
96、a
97、b
98、c
99、d
100、e
101、f)*.(0
102、1
103、2
104、3
105、4
106、5
107、6
108、7
109、8
110、9
111、a
112、b
113、c
114、d
115、e
116、f)(0
117、1
118、2
119、3
120、4
121、5
122、6
123、7
124、8
125、9
126、a
127、b
128、c
129、d
130、e
131、f)*13)十进制整数->0
132、(1
133、2
134、3
135、4
136、5
137、6
138、7
139、8
140、9)(0
141、1
142、2
143、3
144、4
145、5
146、6
147、7
148、8
149、9)*14)八进制整数->0(0
150、1
151、2
152、3
153、4
154、5
155、6
156、7)(0
157、1
158、2
159、3
160、
161、4
162、5
163、6
164、7)*15)十六进制整数->0x(0
165、1
166、2
167、3
168、4
169、5
170、6
171、7
172、8
173、9
174、a
175、b
176、c
177、d
178、e
179、f)(0
180、1
181、2
182、3
183、4
184、5
185、6
186、7
187、8
188、9
189、a
190、b
191、c
192、d
193、e
194、f)*单词分类:运算符:+-*/()常数:十进制实数十进制整数十六进制实数十六进制整数八进制实数八进制整数1.实验目的实现一个词法分析程序,将输入字符串流分解成单词流供语法分析使用。2.实验要求输入算术运算式,输出分解后的单词流,例如:输入(0124.3+0x35a.4f)*12输出:运算符(八进制实数0124.3运算符+十六进制实数0x35a.4f运算符)运算
195、符*十进制整数12注意:l输入可以是键盘输入,也可以是文件输入l如果单词输入错误,必须有提示,例如:输入12a+45*-0x23a3输出错误数据12a运算符+十进制整数45运算符*错误数据运算符-十六进制整数0x23a3//如(0124.3+0x35a.4f)*12//如a+45*-0x23a3#include#include//#include"stdafx.h"unionchars{//联合,可存储字符串,整型和浮点型charpro_char[15];intpro_number;float
196、real;};structdata{//将每个单元用一个结构来存储,其内容包括:类型,所属的具体类型,以及属性值charkind[7];intid;unioncharspro;};intscan(char*a);//对每个用空格打断的单元进行进一步的分析,对其进行进一步的分类voidPrints(chara[15],intid,inta_long);//将分析后的每个token输出voidsave(char*a,intid,intx);//将分析后的结果保存到一个结构数组中charnowChar[15];//临时的存储单元,用来存
197、储被空格打断以后单元charkinds[11][8]={"","INT10","INT8","INT16","IDN","","","","REAL10","REAL8","REAL16"};//单词的不同种别structdatalink[100];//用来存放词法分析以后的结果的结构数组intlink_long=0;//全局变量intscan(char*a){//intid;inta_long=0;intdoc=0;while(*a!=NULL){nowChar[0]=' ';a_long=0;doc=0;//对数值的判断及处
198、理if('0'<=*a&&*a<='9'){//如果第一个字符为数值nowChar[a_long]=*a;*a++;a_long++;//对十六进制的判断及处理if(nowChar[0]=='0'&&(*a=='x'
199、
200、*a=='X')){//如果第一个字符为0,且第二个字符为x,则为十六进制数nowChar[a_long]=*a;*a++;a_long++;while(*a!=NULL&&(('0'<=*a&&*a<='9')
201、
202、('a'<=*a&&*a<='f')
203、
204、('A'<=*a&&*a<='F')
205、
206、*a=='.')){
207、nowChar[a_long]=*a;//一直将此十六进制数完全读入,若为浮点型的,则加以标记if(*a=='.')doc=1;*a++;a_long++;}nowChar[a_long]=' ';//判断输入的十六进制数是否合法if(a_lon
此文档下载收益归作者所有