资源描述:
《《编译原理教学资料》实验一》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理卖验报告实验(1)名称词法分析程序的设计与实现实验人学号10070423姓名吕春龙报告完成日期2013年5月24日成绩指导教师签字实验一词法分析程序的设计与实现一、实验目的基本掌握计算机语言的词法分析程序的开发方法。二、实验内容编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验耍求(1)根据以下的止规式,编制止规文法,画出状态图;标识符〈字母〉(〈字母>1〈数字字符>)*十进制整数0
2、(1
3、2
4、3
5、4
6、5
7、6
8、7
9、8
10、9)(0
11、112
12、3
13、4
14、5
15、6
16、7
17、8
18、9)*八进制整数0(0
19、1
20、2
21、3
22、4
23、5
24、6
25、7)(01112131
26、4151617)*十六进制整数0(x
27、X)(0
28、l
29、2
30、3
31、4
32、5
33、6
34、7
35、8
36、9
37、a
38、b
39、c
40、d
41、e
42、f)(0
43、l
44、2
45、3
46、4
47、5
48、6
49、7
50、8
51、9
52、a
53、b
54、c
55、d
56、e
57、f)*运算符和分隔符+-*/〉〈二();关键字ifthenelsewhi1edo(2)根据状态图,设计词法分析函数intscan(),完成以下功能:A、从输入流(键盘或文件)读入数据,分析出一个单词。B、返回单词种别(用整数表示),C、返冋单词属性(不同的属性可以放在不同的全局变量中)。(3)编写测试程序,循环调用函数scan(),每次调用,获得一个单词的信息。在测试程序中,打印输出单词种别、属性(
58、注意:不要在词法分析函数scan中打印输出)。四、实验步骤(1)单词的正规式描述:标识符〈字母〉(〈字母〉
59、〈数字字符〉)*十进制整数0I(1
60、2
61、3
62、4
63、5
64、6
65、7
66、8
67、9)(01112
68、3141516171819)*八进制整数0(0
69、1
70、2
71、3
72、4
73、5
74、6
75、7)(0
76、112
77、3
78、4
79、5
80、6
81、7)*十六进制整数0(x
82、X)(0
83、l
84、2
85、3
86、4
87、5
88、6
89、7
90、8
91、9
92、a
93、b
94、c
95、d
96、e
97、f)(0
98、l
99、2
100、3
101、4
102、5
103、6
104、7
105、8
106、9
107、a
108、b
109、c
110、d
111、e
112、f)*运算符和分隔符+-*/>〈=();关键字ifthenelsewhiledo(2)状态图:Inti6(3)数据结构
113、与算法typedefstruct{stringwordl;intkind;intshuxing;}z;FILE*fp;charword[30];单词单词种别单词属性〃存放识别出的单词char*keyword[5]={"else〃,"if","then","do","while"};//关键字子函数分析:〃标示符,关键字if((a>=,a&&a<=,z)
114、(a>=,AJ&&a<=,T))intk二0;while((a>二'a'&&a<二'z')
115、
116、(a>二'A'&&a<='Z')11(a>=,O'&&a<-9*))(word[k++]=a;a=(char)getc(f
117、);}word[k]=, ';ungetc(a,f);1.wordl二word;1•kind二iskeyword(word);返回单词种别return1;}elseif(a==,0,){//八进制数b=(char)getc(f);if(b>=0*&&b<=,r){ungetc(b,f);a=,O';charword[30];intk=0;while(a>=05&&3<=7^{word[k++]=a;a=(char)gctc(f);}word[k]=, #;ungetc(a,f);1・word1二word;//sscanf(word,"%x",&c);//cout
118、<=,O'&&m<=,9')
119、
120、(m>=,a')&&(m<=,f')){imgetc(m,I');ungetc(b,f);a='O';charword[30]:(a==,x‘)
121、
122、(a==,X’)){intk=0;while((a>=,O'&&a<=,9')
123、
124、(a>=,a)&&(a<=,f')
125、word[k++]=a;a=(
126、char)getc(f);}word[k]=, ';ungetc(a,f);Iriumber=strtol(word,&endptr,16);丨.shuxing=lnumber;1・wordl^vord;1.kind=7;return1;}else{//错误16进制数1•kind二18;1.wordl^b;rcturn1;}}elseif(b>=,8'&&b<='9')//错误8进制数1.kind=19;1・wordl=b;return1;}else//•H8制o{ungetc(b,f);1.word1二'O';1・shuxing二0;I.kind=6;ret