资源描述:
《标准c语言词法分析(c语言描述)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验内容:实现标准C语言词法分析器实验目的:1.掌握程序设计语言词法分析的设计方法;2.掌握DFA的设计与使用方法;3.掌握正规式到有限自动机的构造方法;实验要求:1.单词种别编码要求基本字(关键字)、运算符、界符:一符一种;标识符(变量名):统一为一种;常量():按类型编码;2.词法分析工作过程中建立符号表、常量表,并以文本文件形式输出;3.词法分析的最后结果以文本文件形式输出;4.完成对所设计词法分析器的功能测试,并给出测试数据和实验结果;5.为增加程序可读性,请在程序中进行适当注释说明;6.
2、整理上机步骤,总结经验和体会;7.认真完成并按时提交实验报告。#include#include#include#include#includeFILE*fr,*fw,*temp1,*temp2;char*key0[]={"main","printf","scanf","else","if","auto","double","int","struct","break","long","switch","cas
3、e","enum","register","typedef","char","extern","return","union","const","float","short","unsigned","continue","for","signed","void","default","goto","sizeof","volatile","do","while","static"};/*关键字表*/char*key1[]={""","\","%%","(",")","[","]","{","}"
4、,",",";","'"};/*边界符表*/char*key2[]={"","+","-","*","/","%","<",">","==",">=","<=","!=","!","&&","
5、
6、","<<",">>","~","
7、","^","&","=","?:","->","++","--",".","+=","-=","*=","/="};/*运算符表*/intisLet(charc)//判断是否是字母{if(c>='a'&&c<='z'
8、
9、c>='A'&&c<='Z')return1;e
10、lsereturn0;}intisNum(charc)//判断是否是数字{if(c>='0'&&c<='9')return1;elsereturn0;}intisKey(char*word){intm,i;for(i=0;i<36;i++){if((m=strcmp(word,key0[i]))==0){if(i==0)return2;elsereturn1;}}return0;}intisBoudany(char*word){intm,i;for(i=0;i<12;i++){if((m=strc
11、mp(word,key1[i]))==0){if(i==1)return2;elseif(i==2)return3;return1;}}return0;}voidcheck(FILE*fr){charword[30];while(fscanf(fr,"%*")!=EOF){memset(word,0,sizeof(word));charch,temp;ch=fgetc(fr);//获取字符,指针fr并自动指向下一个字符inti,c;if((ch=='')
12、
13、(ch=='t'))//处理空字符
14、{}elseif(ch=='')//处理换行{}elseif(ch=='#')//预处理{while(ch!='>')ch=fgetc(fr);ch=fgetc(fr);fprintf(fw,"跳过头文件和文件宏定义");}elseif(ch=='/')//跳过注释/**/类型{ch=fgetc(fr);if(ch=='/')//跳过注释//类型{while(ch!='')ch=fgetc(fr);}elseif(ch=='*'){ch=fgetc(fr);temp=fgetc(fr)
15、;do{ch=fgetc(fr);temp=fgetc(fr);}while(ch!='*'
16、
17、temp!='/');fprintf(fw,"跳过注释");ch=fgetc(fr);}}elseif(isLet(ch)){word[0]=ch;ch=fgetc(fr);i=1;while(isNum(ch)
18、
19、isLet(ch))//判断该字符是否是字母或数字{word[i]=ch;i++;ch=fgetc(fr);}word[i]=' ';//' '代表字符结束(空格)f