编译原理实验-词法分析.doc

编译原理实验-词法分析.doc

ID:59793880

大小:47.00 KB

页数:10页

时间:2020-11-24

编译原理实验-词法分析.doc_第1页
编译原理实验-词法分析.doc_第2页
编译原理实验-词法分析.doc_第3页
编译原理实验-词法分析.doc_第4页
编译原理实验-词法分析.doc_第5页
资源描述:

《编译原理实验-词法分析.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

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

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

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