资源描述:
《词法分析器的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《编译原理》课程实验报告实验题目:某种简单程序语言的词法分析器的设计与实现专业:计算机科学与技术班级:11060341学号:11060341姓名:实验目的:设计一个词法分析程序,理解词法分析器实现的原理,掌握程序设计语言中的各类单词的词法分析方法,加深对词法分析原理的理解。实验任务:词法分析是从左向右扫描每行源程序的符号,拼成单词,换成统一的二元式(单词种别,单词符号的属性值)表示。对给定的程序通过词法分析器识别一个个单词符号,并以二元式(单词种别,单词符号的属性值)显示,本程序则是通过对给定程序段分析后以单词符号和文字提示显示)实验流程:程序清单:#include
2、ostream>#include#includeusingnamespacestd;intk=0;structword{charname[10];intkind;}word[1000];charkey[35][10]={"scanf","short","int","long","float","double","char","struct","union","printf","typedef","const","unsigned","signed","extern","register","static","volatile","voi
3、d","if","else","switch","case","for","do","while","goto","continue","break","default","sizeof","return","include","bool"};boolcmp(chara[]){inti;for(intk=0;k<35;k++){if(strcmp(a,key[k])==0)return1;}return0;}intmain(){#ifdefLOCALfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#en
4、difintp,q,flag;chara[1000],b[10],ch;while(gets(a)){p=0;intlen=strlen(a);while(p='a'&&ch<='z')
5、
6、(ch>='A'&&ch<='Z')
7、
8、ch=='_'){flag=0;q=0;while((ch>='a'&&ch<='z')
9、
10、(ch>='A'&&ch<='Z')
11、
12、ch=='_'
13、
14、(ch>='0'&&ch<='9')){if((ch>=
15、'0'&&ch<='9')
16、
17、ch=='_')flag=1;b[q++]=ch;p++;ch=a[p];}if(flag==1){strcpy(word[k].name,b);word[k++].kind=1;}elseif(flag==0){if(ch=='''
18、
19、ch=='"'){strcpy(word[k].name,b);word[k++].kind=2;}elseif(cmp(b)==1){strcpy(word[k].name,b);word[k++].kind=3;}else{strcpy(word[k].name,b);word[k++].kind=1
20、;}}}elseif((ch>='0'&&ch<='9')
21、
22、ch=='-'){intt=p-1;if(a[t]>='0'&&a[t]<='9'
23、
24、a[t]>='a'&&a[t]<='z'
25、
26、a[t]>='A'&&a[t]<='Z'){p++;ch=a[p];if(ch=='-'
27、
28、ch=='='){b[0]='-';b[1]=ch;strcpy(word[k].name,b);word[k++].kind=5;ch=a[++p];}else{b[0]='-';strcpy(word[k].name,b);word[k++].kind=5;}}else{q=0;b[q+
29、+]=ch;p++;ch=a[p];while((ch>='0'&&ch<='9')
30、
31、ch=='.'){b[q++]=ch;p++;ch=a[p];}strcpy(word[k].name,b);word[k++].kind=2;}}elseif(ch=='('
32、
33、ch==')'
34、
35、ch=='['
36、
37、ch==']'
38、
39、ch=='{'
40、
41、ch=='}'
42、
43、ch==','
44、
45、ch==';'
46、
47、ch==':'
48、
49、ch=='''
50、
51、ch=='"')//ch=='('
52、
53、ch==')'
54、
55、ch=='['
56、
57、ch==']'
58、
59、ch=='{'
60、
61、c