1、C语言词法分析器源代码风君版C 语言词法分析器 _源代码 _风君版 .txt 小时候觉得父亲不简单,后来觉得自己不简单,再后来觉得自己孩子不简单。越是想知道自己是不是忘记的时候,反而记得越清楚。 #include#include #include char *key0=,auto,break,case,char,const,continue,default,do,double,else,enum,extern,float,for,goto,if,int,long,register,return,short,signed,sizeof,static,struct,switch,typedef,_
2、Complex,_Imaginary,union,unsigned,void,volatile,while;/* 保留字表 */char *key1= ,(,),;,;/* 分隔符表 */char *key2=,+,-,*,/,%,=,=,=,!=,!,&,|,|,&,=,?:,-,+,-,.,+=,-=,*=,/=;/* 运算符表 */int xx035,xx110,xx231;int temp_key3=0,temp_c40=0,temp_c41=0,temp_c42=0,temp_c43=0;/* 初始化函数 */void load()int mm;for (mm=0;mm=34;mm+
3、)xx0mm=0;for (mm=0;mm=9;mm+)xx1mm=0;for (mm=0;mm=30;mm+)xx2mm=0;FILE *floading;if (floading=fopen(key0.txt,w)=NULL)printf(Error! Cant create file : key0.txt);return;fclose (floading);/* 建立保留字表文件: key0.txt*/if (floading=fopen(key1.txt,w)=NULL)printf(Error! Cant create file : key1.txt);return;/* 建立分隔符
4、表文件: key1.txt*/if (floading=fopen(key2.txt,w)=NULL)printf(Error! Cant create file : key2.txt);return;fclose(floading);/* 建立运算符表文件: key2.txt*/if (floading=fopen(key3.txt,w)=NULL)printf(Error! Cant create file : key3.txt);return;fclose (floading);/* 建立标识符表文件: key3.txt*/if (floading=fopen(c40.txt,w)=NU
5、LL)printf(Error! Cant create file : c40.txt);return;fclose (floading);/* 建立整数类型常量表文件: c40.txt*/if (floading=fopen(c41.txt,w)=NULL)printf(Error! Cant create file : c41.txt);return;fclose (floading);/* 建立浮点类型常量表文件: c41.txt*/if (floading=fopen(c42.txt,w)=NULL)printf(Error! Cant create file : c42.txt);r
6、eturn;fclose (floading);/* 建立字符类型常量表文件: c42.txt*/if (floading=fopen(c43.txt,w)=NULL)printf(Error! Cant create file : c43.txt);return;fclose (floading);/* 建立字符串类型常量表文件: c43.txt*/if (floading=fopen(defination.txt,w)=NULL)printf(Error! Cant create file : defination.txt);return;fclose (floading);/* 建立注释
7、文件: defination.txt*/if (floading=fopen(output.txt,w)=NULL)printf(Error! Cant create file : output.txt);return;fclose (floading);/* 建立内部码文件: output.txt*/if (floading=fopen(temp_key1,w)=NULL)printf(Error! Cant create file : temp_key1);return;fclose (floading);/* 建立保留字临时表文件: temp_key1*/if (floading=fop
8、en(temp_key3,w)=NULL)printf(Error! Cant create file : temp_key3);return;fclose (floading);/* 建立标识符临时文件: temp_key3*/if (floading=fopen(temp_c40,w)=NULL)printf(Error! Cant create file : temp_c40);return;fclose (floading);/* 建立整数类型常量临时文件: temp_c40*/if (floading=fopen(temp_c41,w)=NULL)printf(Error! Cant
9、 create file : temp_c41);return;fclose (floading);/* 建立浮点类型常量临时文件: temp_c41*/if (floading=fopen(temp_c42,w)=NULL)printf(Error! Cant create file : temp_c42);return;fclose (floading);/* 建立字符类型常量临时文件: temp_c42*/if (floading=fopen(temp_c43,w)=NULL)printf(Error! Cant create file : temp_c43);return;fclose
10、 (floading);/* 建立字符串类型常量临时文件: temp_c43*/* 保留字及标识符判断函数 */void char_search(char *word)int m,line=0,csi=0;int value=0;int value2=0;char c,cs100;FILE *foutput,*finput;for (m=1;m)chin=fgetc(fin);/*chin=fgetc(fin);*/* 对空格符、水平制表符进行处理 */else if (chin= )|(chin=t);/* 对回车符进行处理 */else if (chin=n);/* 对单引号内的字符常量进行处理 */else if (chin=target0)if (xx19=0)fout=fopen(key1.txt,a);fprintf(fout,1t9tt%cn,target0);fclose(fout);xx19=1;temp0=chin;chin=fgetc(fin);temp1=chin;chin=fgetc(fin);if (chin!=target0)temp2=chin;chin=fgetc(fin);temp3=chin;temp4=0;elsetemp2=chin;temp3
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1