1、C语言词法分析研究器开发文档源代码C语言词法分析器开发文档Powered By 萌萌地玉雪一、实验题目编制并调试C词法分析程序.二、实验目地全面深入理解高级语言程序设计知识,掌握应用技巧,提高应用与分析能力.三、主要函数void load ( ) void char_search(char *word)void main ( )void intb_search(char *word)void scan ( )void c_search(char *word)void inta_search(char *word)void cc_search(char *word)四、设计1.主函数 void
2、main ( )2. 初始化函数 void load ( )3. 保留字及标识符判断函数 void char_search(char *word)4. 整数类型判断函数 void inta_search(char *word)5. 浮点类型判断函数void intb_search(char *word)6. 字符串常量判断函数 void cc_search(char *word)7. 字符常量判断函数 void c_search(char *word)同4、5函数图8.主扫描函数 void scan ( )五、关键代码#include #include #include char *key0=
3、 ,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,_Complex,_Imaginary,union,unsigned,void,volatile,while;b5E2R。/*保留字表*/char *key1= ,(,),;,;p1Ean。/*分隔符表*/char *key2= ,+,-,*,/,%,=,=,=,!=,
4、!,&,|,|,&,=,?:,-,+,-,.,+=,-=,*=,/=;DXDiT。/*运算符表*/int xx035,xx110,xx231;int temp_key3=0,temp_c40=0,temp_c41=0,temp_c42=0,temp_c43=0;RTCrp。/* 初始化函数 */void load() int mm; for (mm=0;mm=34;mm+) 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
5、,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; /*建立分隔符表文件:key1.txt*/ if (floading=fopen(key2.txt,w)=NULL) printf(Error! Cant create file : key2.txt); retur
6、n; 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)=NULL) printf(Error! Cant create file : c40.txt); return; fclose (floading); /*建立整数类型常量表文件:c40.txt
7、*/ 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); return; fclose (floading); /*建立字符类型常量表文件:c42.txt*/ if (floading=fopen(c43.txt,w)=NULL) p
8、rintf(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);5PCzV。 return; fclose (floading); /*建立注释文件:defination.txt*/ if (floading=fopen(output.txt,w)=NULL) printf(Error! C
9、ant 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=fopen(temp_key3,w)=NULL) printf(Error! Cant create file : temp_key3); r
10、eturn; 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 create file : temp_c41); return; fclose (floading); /*建立浮点类型
11、常量临时文件: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 (floading); /*建立字符串类型常量临时文件:temp_c43*/* 保留字及标识符判断函数
12、*/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) foutput=fopen(key0.txt,a); fprintf(foutput,0t%dtt%sn,m,word); fclose(foutput); xx0m=1; foutput=fopen
13、(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); fprintf(foutput,3t1tt%sn,word); fclose(foutput); finput=fopen(temp_key3,r); c=fgetc(finput); while
14、(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); fprintf(foutput,3t%dtt%sn,line,word); fclose(foutput); else foutput=fopen(temp_key3,a); fprintf(f
15、output,%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,word); fclose(foutput); /* 整数类型判断函数 */void inta_search(char *word) FILE *foutput,*finput; char c; cha
16、r 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); fclose(foutput); finput=fopen(temp_c40,r); c=fgetc(finput); while (c!=EOF) while (c!=n) cscsi+=c;
17、 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); fclose(foutput); else foutput=fopen(temp_c40,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c40+;
18、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_search(char *word) FILE *foutput,*finput; char c; char cs100; int csi=0; int line=0; int value2=0; if
19、 (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=fgetc(finput); while (c!=EOF) while (c!=n) cscsi+=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (str
20、cmp(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); fprintf(foutput,%sn,word); fclose(foutput); temp_c41+; foutput=fopen(output.txt,a); fprintf(foutput,4t1
21、t%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; char cs100; int csi=0; int line=0; int value2=0; if (temp_c43=0) foutput=fopen(temp_c43,a); fprintf(
22、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+=c; c=fgetc(finput); cscsi=0; csi=0; line+; if (strcmp(cs,word)=0) value2=1; break; c=fgetc(finput);
23、 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+; foutput=fopen(output.txt,a); fprintf(foutput,4t3t%dt%sn,temp_c43,word); fclose(foutput); foutput=
24、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 (temp_c42=0) foutput=fopen(temp_c42,a); fprintf(foutput,%sn,word); fclose(foutput); temp_c42+; fout
25、put=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 (strcmp(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); fclo
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1