编译原理C语言词法分析器.docx

上传人:b****8 文档编号:12958568 上传时间:2023-06-09 格式:DOCX 页数:39 大小:120.36KB
下载 相关 举报
编译原理C语言词法分析器.docx_第1页
第1页 / 共39页
编译原理C语言词法分析器.docx_第2页
第2页 / 共39页
编译原理C语言词法分析器.docx_第3页
第3页 / 共39页
编译原理C语言词法分析器.docx_第4页
第4页 / 共39页
编译原理C语言词法分析器.docx_第5页
第5页 / 共39页
编译原理C语言词法分析器.docx_第6页
第6页 / 共39页
编译原理C语言词法分析器.docx_第7页
第7页 / 共39页
编译原理C语言词法分析器.docx_第8页
第8页 / 共39页
编译原理C语言词法分析器.docx_第9页
第9页 / 共39页
编译原理C语言词法分析器.docx_第10页
第10页 / 共39页
编译原理C语言词法分析器.docx_第11页
第11页 / 共39页
编译原理C语言词法分析器.docx_第12页
第12页 / 共39页
编译原理C语言词法分析器.docx_第13页
第13页 / 共39页
编译原理C语言词法分析器.docx_第14页
第14页 / 共39页
编译原理C语言词法分析器.docx_第15页
第15页 / 共39页
编译原理C语言词法分析器.docx_第16页
第16页 / 共39页
编译原理C语言词法分析器.docx_第17页
第17页 / 共39页
编译原理C语言词法分析器.docx_第18页
第18页 / 共39页
编译原理C语言词法分析器.docx_第19页
第19页 / 共39页
编译原理C语言词法分析器.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

编译原理C语言词法分析器.docx

《编译原理C语言词法分析器.docx》由会员分享,可在线阅读,更多相关《编译原理C语言词法分析器.docx(39页珍藏版)》请在冰点文库上搜索。

编译原理C语言词法分析器.docx

编译原理C语言词法分析器

编译原理C语言词法分析器

一、实验题目

编制并调试C词法分析程序。

a.txt源代码:

main(){

intsum=0,it=1;/*Variabledeclaration*/

if(sum==1)

  it++;

else

  it=it+2;

}

设计其词法分析程序,能识别出所有的关键字、标识符、常数、运算符(包括复合运算符,如++)、界符;能过滤掉源程序中的注释、空格、制表符、换行符;并且能够对一些词法规则的错误进行必要的处理,如:

标识符只能由字母、数字与下划线组成,且第一个字符必须为字母或下划线。

实验要求:

要给出所分析语言的词法说明,相应的状态转换图,单词的种别编码方案,词法分析程序的主要算法思想等。

二、实验目的

1、理解词法分析在编译程序中的作用;

2、掌握词法分析程序的实现方法与技术;

3、加深对有穷自动机模型的理解。

三、主要函数

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()

 

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()

五、关键代码

#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);

}

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

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2