C语言词法分析器源代码风君版.docx

上传人:b****6 文档编号:5073019 上传时间:2022-12-13 格式:DOCX 页数:34 大小:18.48KB
下载 相关 举报
C语言词法分析器源代码风君版.docx_第1页
第1页 / 共34页
C语言词法分析器源代码风君版.docx_第2页
第2页 / 共34页
C语言词法分析器源代码风君版.docx_第3页
第3页 / 共34页
C语言词法分析器源代码风君版.docx_第4页
第4页 / 共34页
C语言词法分析器源代码风君版.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

C语言词法分析器源代码风君版.docx

《C语言词法分析器源代码风君版.docx》由会员分享,可在线阅读,更多相关《C语言词法分析器源代码风君版.docx(34页珍藏版)》请在冰豆网上搜索。

C语言词法分析器源代码风君版.docx

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","sho

rt","signed","sizeof","static","struct","switch","typedef","_Complex","_Imaginar

y","union","unsigned","void","volatile","while"};

/*保留字表*/

char*key1[]={"","(",")","[","]","{","}",",",";","'"};

/*分隔符表*/

char*key2[]={"

","+","-","*","/","%","<",">","==",">=","<=","!

=","!

","&&","||","<<",">>","~","|

","^","&","=","?

:

","->","++","--",".","+=","-=","*=","/="};

/*运算符表*/

intxx0[35],xx1[10],xx2[31];

 

inttemp_key3=0,temp_c40=0,temp_c41=0,temp_c42=0,temp_c43=0;

 

/*******初始化函数*******/

 

voidload()

{

intmm;

for(mm=0;mm<=34;mm++)

{

xx0[mm]=0;

}

for(mm=0;mm<=9;mm++)

{

xx1[mm]=0;

}

for(mm=0;mm<=30;mm++)

{

xx2[mm]=0;

}

FILE*floading;

if((floading=fopen("key0.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

key0.txt");

return;

 

}

fclose(floading);

/*建立保留字表文件:

key0.txt*/

if((floading=fopen("key1.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

key1.txt");

return;

}

/*建立分隔符表文件:

key1.txt*/

if((floading=fopen("key2.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

key2.txt");

return;

}

fclose(floading);

/*建立运算符表文件:

key2.txt*/

if((floading=fopen("key3.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

key3.txt");

return;

}

fclose(floading);

/*建立标识符表文件:

key3.txt*/

if((floading=fopen("c40.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

c40.txt");

return;

}

fclose(floading);

/*建立整数类型常量表文件:

c40.txt*/

if((floading=fopen("c41.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

c41.txt");

return;

}

fclose(floading);

/*建立浮点类型常量表文件:

c41.txt*/

if((floading=fopen("c42.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

c42.txt");

return;

}

fclose(floading);

/*建立字符类型常量表文件:

c42.txt*/

 

if((floading=fopen("c43.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

c43.txt");

return;

}

fclose(floading);

/*建立字符串类型常量表文件:

c43.txt*/

if((floading=fopen("defination.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

defination.txt");

return;

}

fclose(floading);

/*建立注释文件:

defination.txt*/

if((floading=fopen("output.txt","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

output.txt");

return;

}

fclose(floading);

/*建立内部码文件:

output.txt*/

if((floading=fopen("temp_key1","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

temp_key1");

return;

}

fclose(floading);

/*建立保留字临时表文件:

temp_key1*/

if((floading=fopen("temp_key3","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

temp_key3");

return;

}

fclose(floading);

/*建立标识符临时文件:

temp_key3*/

if((floading=fopen("temp_c40","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

temp_c40");

return;

}

fclose(floading);

/*建立整数类型常量临时文件:

temp_c40*/

if((floading=fopen("temp_c41","w"))==NULL)

{

 

printf("Error!

Can'tcreatefile:

temp_c41");

return;

}

fclose(floading);

/*建立浮点类型常量临时文件:

temp_c41*/

if((floading=fopen("temp_c42","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

temp_c42");

return;

}

fclose(floading);

/*建立字符类型常量临时文件:

temp_c42*/

if((floading=fopen("temp_c43","w"))==NULL)

{

printf("Error!

Can'tcreatefile:

temp_c43");

return;

}

fclose(floading);

/*建立字符串类型常量临时文件:

temp_c43*/

}

 

/*******保留字及标识符判断函数*******/

 

voidchar_search(char*word)

{

intm,line=0,csi=0;

intvalue=0;

intvalue2=0;

charc,cs[100];

FILE*foutput,*finput;

for(m=1;m<=34;m++)

{

if(strcmp(word,key0[m])==0)

{

value=1;

break;

}

}

if(value==1)

{

if(xx0[m]==0)

{

foutput=fopen("key0.txt","a");

fprintf(foutput,"0\t%d\t\t%s\n",m,word);

 

fclose(foutput);

xx0[m]=1;

}

foutput=fopen("output.txt","a");

fprintf(foutput,"0\t%d\t\t%s\n",m,word);

fclose(foutput);

}

else

{

if(temp_key3==0)

{

foutput=fopen("temp_key3","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_key3++;

foutput=fopen("key3.txt","a");

fprintf(foutput,"3\t1\t\t%s\n",word);

fclose(foutput);

}

finput=fopen("temp_key3","r");

c=fgetc(finput);

while(c!

=EOF)

{

while(c!

='\n')

{

cs[csi++]=c;

c=fgetc(finput);

}

cs[csi]='\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,"3\t%d\t\t%s\n",line,word);

fclose(foutput);

}

else

{

foutput=fopen("temp_key3","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_key3++;

foutput=fopen("output.txt","a");

fprintf(foutput,"3\t%d\t\t%s\n",temp_key3,word);

fclose(foutput);

foutput=fopen("key3.txt","a");

fprintf(foutput,"3\t%d\t\t%s\n",temp_key3,word);

fclose(foutput);

}

}

}

 

/*******整数类型判断函数*******/

 

voidinta_search(char*word)

{

FILE*foutput,*finput;

charc;

charcs[100];

intcsi=0;

intline=0;

intvalue2=0;

if(temp_c40==0)

{

foutput=fopen("temp_c40","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c40++;

foutput=fopen("c40.txt","a");

fprintf(foutput,"4\t0\t1\t%s\n",word);

fclose(foutput);

}

finput=fopen("temp_c40","r");

c=fgetc(finput);

while(c!

=EOF)

 

{

while(c!

='\n')

{

cs[csi++]=c;

c=fgetc(finput);

}

cs[csi]='\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,"4\t0\t%d\t%s\n",line,word);

fclose(foutput);

}

else

{

foutput=fopen("temp_c40","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c40++;

foutput=fopen("output.txt","a");

fprintf(foutput,"4\t0\t%d\t%s\n",temp_c40,word);

fclose(foutput);

foutput=fopen("c40.txt","a");

fprintf(foutput,"4\t0\t%d\t%s\n",temp_c40,word);

fclose(foutput);

}

}

 

/*******浮点类型判断函数*******/

 

voidintb_search(char*word)

{

FILE*foutput,*finput;

charc;

 

charcs[100];

intcsi=0;

intline=0;

intvalue2=0;

if(temp_c41==0)

{

foutput=fopen("temp_c41","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c41++;

foutput=fopen("c41.txt","a");

fprintf(foutput,"4\t1\t1\t%s\n",word);

fclose(foutput);

}

finput=fopen("temp_c41","r");

c=fgetc(finput);

while(c!

=EOF)

{

while(c!

='\n')

{

cs[csi++]=c;

c=fgetc(finput);

}

cs[csi]='\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,"4\t1\t%d\t%s\n",line,word);

fclose(foutput);

}

else

{

foutput=fopen("temp_c41","a");

fprintf(foutput,"%s\n",word);

 

fclose(foutput);

temp_c41++;

foutput=fopen("output.txt","a");

fprintf(foutput,"4\t1\t%d\t%s\n",temp_c41,word);

fclose(foutput);

foutput=fopen("c40.txt","a");

fprintf(foutput,"4\t1\t%d\t%s\n",temp_c41,word);

fclose(foutput);

}

}

 

/*******字符串常量判断函数*******/

 

voidcc_search(char*word)

{

FILE*foutput,*finput;

charc;

charcs[100];

intcsi=0;

intline=0;

intvalue2=0;

if(temp_c43==0)

{

foutput=fopen("temp_c43","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c43++;

foutput=fopen("c43.txt","a");

fprintf(foutput,"4\t3\t1\t%s\n",word);

fclose(foutput);

}

finput=fopen("temp_c43","r");

c=fgetc(finput);

while(c!

=EOF)

{

while(c!

='\n')

{

cs[csi++]=c;

c=fgetc(finput);

}

cs[csi]='\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,"4\t3\t%d\t%s\n",line,word);

fclose(foutput);

}

else

{

foutput=fopen("temp_c43","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c43++;

foutput=fopen("output.txt","a");

fprintf(foutput,"4\t3\t%d\t%s\n",temp_c43,word);

fclose(foutput);

foutput=fopen("c43.txt","a");

fprintf(foutput,"4\t3\t%d\t%s\n",temp_c43,word);

fclose(foutput);

}

}

 

/*******字符常量判断函数*******/

 

voidc_search(char*word)

{

FILE*foutput,*finput;

charc;

charcs[100];

intcsi=0;

intline=0;

intvalue2=0;

if(temp_c42==0)

{

foutput=fopen("temp_c42","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c42++;

 

foutput=fopen("c42.txt","a");

fprintf(foutput,"4\t2\t1\t%s\n",word);

fclose(foutput);

}

finput=fopen("temp_c42","r");

c=fgetc(finput);

while(c!

=EOF)

{

while(c!

='\n')

{

cs[csi++]=c;

c=fgetc(finput);

}

cs[csi]='\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,"4\t2\t%d\t%s\n",line,word);

fclose(foutput);

}

else

{

foutput=fopen("temp_c42","a");

fprintf(foutput,"%s\n",word);

fclose(foutput);

temp_c42++;

foutput=fopen("output.txt","a");

fprintf(foutput,"4\t2\t%d\t%s\n",temp_c42,word);

fclose(foutput);

foutput=fopen("c42.txt","a");

fprintf(foutput,"4\t2\t%d\t%s\n",temp_c42,word);

fclose(foutput);

}

}

 

/*******主扫描函数*******/

 

voidscan()

{

intcount;

charchin;

FILE*fin;

FILE*fout;

charfilename[50];

chartemp[100];

chartarget[3]="'";

printf("请输入文件名:

");

scanf("%s",filename);

if((fin=fopen(filename,"r"))==NULL)

{

printf("Error!

Can'topenfile:

%s\n",filename);

return;

}

chin=fgetc(fin);

while(chin!

=EOF)

{

/*对文件包含、宏定义进行处理*/

if(chin=='#')

{

while(chin!

='>')

chin=fgetc(fin);

/*chin=fgetc(fin);*/

}

/*对空格符、水平制表符进行处理*/

elseif((chin=='')||(chin=='\t'))

{

;

}

/*对回车符进行处理*/

elseif(chin=='\n')

{

;

}

/*对单引号内的字符常量进行处理*/

elseif(chin==target[0])

{

if(xx1[9]==0)

{

 

fout=fopen("key1.txt","a");

fprintf(fout,"1\t9\t\t%c\n",target[0]);

fclose(fout);

xx1[9]=1;

}

temp[0]=chin;

chin=fgetc(fin);

temp[1]=chin;

chin=fgetc(fin);

if(chin!

=target[0])

{

temp[2]=chin;

chin=fgetc(fin);

temp[3]=chin;

temp[4]='\0';

}

else

{

temp[2]=chin;

temp[3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1