《C语言词法分析器》开发文档源代码.docx
- 文档编号:6409717
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:35
- 大小:20.17KB
《C语言词法分析器》开发文档源代码.docx
《《C语言词法分析器》开发文档源代码.docx》由会员分享,可在线阅读,更多相关《《C语言词法分析器》开发文档源代码.docx(35页珍藏版)》请在冰豆网上搜索。
《C语言词法分析器》开发文档源代码
《C语言词法分析器》开发文档
PoweredBy萌萌的玉雪
一、实验题目
编制并调试C词法分析程序。
二、实验目的
全面深入理解高级语言程序设计知识,掌握应用技巧,提高应用与分析能力。
三、主要函数
voidload(>voidchar_search(char*word>
voidmain(>voidintb_search(char*word>
voidscan(>voidc_search(char*word>
voidinta_search(char*word>voidcc_search(char*word>
四、设计
1.主函数voidmain(>
绘制程序界面
调用初始化函数:
voidload(>实现文件的建立
调用主扫描函数:
voidscan(>实现文件的扫描
分析完成后指引用户查看相关文件,直到用户输入退出命令
函数结束
2.初始化函数voidload(>
通过文件指针建立相关文件
函数结束
3.保留字及标识符判断函数voidchar_search(char*word>
接收数据
是否为保留字
否:
查标识符表
是:
写入输出文件
没找到:
写入表文件
找到:
写入输出文件
写入输出文件
4.整数类型判断函数voidinta_search(char*word>
接收数据
找到:
写入输出文件
写入输出文件
查表
没找到:
写入整数常量表文件
5.浮点类型判断函数voidintb_search(char*word>
没找到:
写入整数常量表文件
找到:
写入输出文件
查表
接收数据
写入输出文件
6.字符串常量判断函数voidcc_search(char*word>
7.字符常量判断函数voidc_search(char*word>
同4、5函数图
8.主扫描函数voidscan(>
函数开始
读入源文件中的一个单词
判断
宏定义
忽略
无效字符
忽略
调用保留字及标识符函数voidchar_search进行处理
字符串
字符常量
调用字符常量判断函数voidc_search进行处理
调用字符串常量判断函数voidcc_search进行处理
字符串常量
整数常量
调用整数类型判断函数voidinta_search进行处理
调用浮点类型判断函数voidintb_search进行处理
浮点数常量
注释
写入注释文件
查运算符、分隔符表并写入输出文件
限制符
五、关键代码
#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","_Complex","_Imaginary","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>。
}
fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言词法分析器 语言 词法 分析器 开发 文档 源代码