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,_Comp
2、lex,_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+) xx0mm
3、=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(c4
5、0.txt,w)=NULL) 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
6、 file : c42.txt); return; 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;
7、 fclose (floading); /*建立注释文件: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); /*建立保留字临时
8、表文件:temp_key1*/ if (floading=fopen(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=fop
9、en(temp_c41,w)=NULL) printf(Error! Cant 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(Erro
10、r! Cant create file : temp_c43); return; fclose (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=34;m+) if (strcmp(word,key0m)=0) value=1; break; if (value=1) if (xx0m=0)
11、foutput=fopen(key0.txt,a); fprintf(foutput,0t%dtt%sn,m,word); fclose(foutput); xx0m=1; foutput=fopen(output.txt,a); fprintf(foutput,0t%dtt%sn,m,word); fclose(foutput); else if (temp_key3=0) foutput=fopen(temp_key3,a); fprintf(foutput,%sn,word); fclose(foutput); temp_key3+; foutput=fopen(key3.txt,a);
12、 fprintf(foutput,3t1tt%sn,word); fclose(foutput); finput=fopen(temp_key3,r); c=fgetc(finput); while (c!=EOF) while (c!=n) cscsi+=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (strcmp(cs,word)=0) value2=1; break; else value2=0; c=fgetc(finput); fclose(finput); if (value2=1) foutput=fopen(output.txt,a
13、); fprintf(foutput,3t%dtt%sn,line,word); fclose(foutput); else foutput=fopen(temp_key3,a); fprintf(foutput,%sn,word); fclose(foutput); temp_key3+; foutput=fopen(output.txt,a); fprintf(foutput,3t%dtt%sn,temp_key3,word); fclose(foutput); foutput=fopen(key3.txt,a); fprintf(foutput,3t%dtt%sn,temp_key3,w
14、ord); fclose(foutput); /* 整数类型判断函数 */void inta_search(char *word) FILE *foutput,*finput; char c; char cs100; int csi=0; int line=0; int value2=0; if (temp_c40=0) foutput=fopen(temp_c40,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c40+; foutput=fopen(c40.txt,a); fprintf(foutput,4t0t1t%sn,word
15、); fclose(foutput); finput=fopen(temp_c40,r); c=fgetc(finput); while (c!=EOF) while (c!=n) cscsi+=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (strcmp(cs,word)=0) value2=1; break; c=fgetc(finput); fclose(finput); if (value2=1) foutput=fopen(output.txt,a); fprintf(foutput,4t0t%dt%sn,line,word); fclo
16、se(foutput); else foutput=fopen(temp_c40,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c40+; foutput=fopen(output.txt,a); fprintf(foutput,4t0t%dt%sn,temp_c40,word); fclose(foutput); foutput=fopen(c40.txt,a); fprintf(foutput,4t0t%dt%sn,temp_c40,word); fclose(foutput); /* 浮点类型判断函数 */void intb_s
17、earch(char *word) FILE *foutput,*finput; char c; char cs100; int csi=0; int line=0; int value2=0; if (temp_c41=0) foutput=fopen(temp_c41,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c41+; foutput=fopen(c41.txt,a); fprintf(foutput,4t1t1t%sn,word); fclose(foutput); finput=fopen(temp_c41,r); c=
18、fgetc(finput); while (c!=EOF) while (c!=n) cscsi+=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (strcmp(cs,word)=0) value2=1; break; c=fgetc(finput); fclose(finput); if (value2=1) foutput=fopen(output.txt,a); fprintf(foutput,4t1t%dt%sn,line,word); fclose(foutput); else foutput=fopen(temp_c41,a); fpr
19、intf(foutput,%sn,word); fclose(foutput); temp_c41+; foutput=fopen(output.txt,a); fprintf(foutput,4t1t%dt%sn,temp_c41,word); fclose(foutput); foutput=fopen(c40.txt,a); fprintf(foutput,4t1t%dt%sn,temp_c41,word); fclose(foutput); /* 字符串常量判断函数 */void cc_search(char *word) FILE *foutput,*finput; char c;
20、char cs100; int csi=0; int line=0; int value2=0; if (temp_c43=0) foutput=fopen(temp_c43,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c43+; foutput=fopen(c43.txt,a); fprintf(foutput,4t3t1t%sn,word); fclose(foutput); finput=fopen(temp_c43,r); c=fgetc(finput); while (c!=EOF) while (c!=n) cscsi+
21、=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (strcmp(cs,word)=0) value2=1; break; c=fgetc(finput); fclose(finput); if (value2=1) foutput=fopen(output.txt,a); fprintf(foutput,4t3t%dt%sn,line,word); fclose(foutput); else foutput=fopen(temp_c43,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c43
22、+; foutput=fopen(output.txt,a); fprintf(foutput,4t3t%dt%sn,temp_c43,word); fclose(foutput); foutput=fopen(c43.txt,a); fprintf(foutput,4t3t%dt%sn,temp_c43,word); fclose(foutput); /* 字符常量判断函数 */void c_search(char *word) FILE *foutput,*finput; char c; char cs100; int csi=0; int line=0; int value2=0; if
23、 (temp_c42=0) foutput=fopen(temp_c42,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c42+; foutput=fopen(c42.txt,a); fprintf(foutput,4t2t1t%sn,word); fclose(foutput); finput=fopen(temp_c42,r); c=fgetc(finput); while (c!=EOF) while (c!=n) cscsi+=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (str
24、cmp(cs,word)=0) value2=1; break; c=fgetc(finput); fclose(finput); if (value2=1) foutput=fopen(output.txt,a); fprintf(foutput,4t2t%dt%sn,line,word); fclose(foutput); else foutput=fopen(temp_c42,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c42+; foutput=fopen(output.txt,a); fprintf(foutput,4t2
25、t%dt%sn,temp_c42,word); fclose(foutput); foutput=fopen(c42.txt,a); fprintf(foutput,4t2t%dt%sn,temp_c42,word); fclose(foutput); /* 主扫描函数 */void scan() int count; char chin; FILE *fin; FILE *fout; char filename50; char temp100; char target3=; printf(请输入文件名:); scanf(%s,filename); if (fin=fopen(filename,r)=NULL) printf(Error! Cant open file : %sn,filename); return; chin=fge