欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

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

    • 资源ID:3155439       资源大小:40.75KB        全文页数:47页
    • 资源格式: DOCX        下载积分:6.99金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要6.99金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    C语言词法分析器 C语言 源代码#include &ltstdio.h&gt#include &ltstring.h&gt#include &ltstdlib.h&gtchar *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=" ","+","-","*","/","%","&lt","&gt","=","&gt=","&lt=","!=","!","&&","|","&lt&lt","&gt&gt","","|","","&","=","?:","-&gt","+","-",".","+=","-=","*=","/="/*运算符表*/int xx035,xx110,xx231;int temp_key3=0,temp_c40=0,temp_c41=0,temp_c42=0,temp_c43=0;/* 初始化函数 */void loadint mm;for (mm=0;mm&lt=34;mm+)xx0mm=0;for (mm=0;mm&lt=9;mm+)xx1mm=0;for (mm=0;mm&lt=30;mm+)xx2mm=0;FILE *floading;if (floading=fopen("key0.txt","w")=NULL)printf("Error! Can't create file : key0.txt");return;fclose (floading);/*建立保留字表文件:key0.txt*/if (floading=fopen("key1.txt","w")=NULL)printf("Error! Can't create file : key1.txt");return;/*建立分隔符表文件:key1.txt*/if (floading=fopen("key2.txt","w")=NULL)printf("Error! Can't create file : key2.txt");return;fclose(floading);/*建立运算符表文件:key2.txt*/if (floading=fopen("key3.txt","w")=NULL)printf("Error! Can't create file : key3.txt");return;fclose (floading);/*建立标识符表文件:key3.txt*/if (floading=fopen("c40.txt","w")=NULL)printf("Error! Can't create file : c40.txt");return;fclose (floading);/*建立整数类型常量表文件:c40.txt*/if (floading=fopen("c41.txt","w")=NULL)printf("Error! Can't create file : c41.txt");return;fclose (floading);/*建立浮点类型常量表文件:c41.txt*/if (floading=fopen("c42.txt","w")=NULL)printf("Error! Can't create file : c42.txt");return;fclose (floading);/*建立字符类型常量表文件:c42.txt*/if (floading=fopen("c43.txt","w")=NULL)printf("Error! Can't create file : c43.txt");return;fclose (floading);/*建立字符串类型常量表文件:c43.txt*/if (floading=fopen("defination.txt","w")=NULL)printf("Error! Can't create file : defination.txt");return;fclose (floading);/*建立注释文件:defination.txt*/if (floading=fopen("output.txt","w")=NULL)printf("Error! Can't create file : output.txt");return;fclose (floading);/*建立内部码文件:output.txt*/if (floading=fopen("temp_key1","w")=NULL)printf("Error! Can't create file : temp_key1");return;fclose (floading);/*建立保留字临时表文件:temp_key1*/if (floading=fopen("temp_key3","w")=NULL)printf("Error! Can't create file : temp_key3");return;fclose (floading);/*建立标识符临时文件:temp_key3*/if (floading=fopen("temp_c40","w")=NULL)printf("Error! Can't create file : temp_c40");return;fclose (floading);/*建立整数类型常量临时文件:temp_c40*/if (floading=fopen("temp_c41","w")=NULL)printf("Error! Can't create file : temp_c41");return;fclose (floading);/*建立浮点类型常量临时文件:temp_c41*/if (floading=fopen("temp_c42","w")=NULL)printf("Error! Can't create file : temp_c42");return;fclose (floading);/*建立字符类型常量临时文件:temp_c42*/if (floading=fopen("temp_c43","w")=NULL)printf("Error! Can't 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&lt=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("output.txt","a");fprintf(foutput,"0t%dtt%sn",m,word);fclose(foutput);elseif (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 (c!=EOF)while (c!='n')cscsi+=c;c=fgetc(finput);cscsi='0'csi=0;line+;if (strcmp(cs,word)=0)value2=1;break;elsevalue2=0;c=fgetc(finput);fclose(finput);if (value2=1)foutput=fopen("output.txt","a");fprintf(foutput,"3t%dtt%sn",line,word);fclose(foutput);elsefoutput=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,word);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);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);fclose(foutput);elsefoutput=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_search(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=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);elsefoutput=fopen("temp_c41","a");fprintf(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;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+=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);elsefoutput=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=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+;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 (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);elsefoutput=fopen("temp_c42","a");fprintf(foutput,"%sn",word);fclose(foutput);temp_c42+;foutput=fopen("output.txt","a");fprintf(foutput,"4t2t%dt%sn",temp_c42,word);fclose(foutput);foutput=fopen("c42.txt","a");fprintf(foutput,"4t2t%dt%sn",temp_c42,word);fclose(foutput);/* 主扫描函数 */void scanint 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! Can't open file : %sn",filename);return;chin=fgetc(fin);while (chin!=EOF)/*对文件包含、宏定义进行处理*/if (chin='#')while (chin!='&gt')chin=fgetc(fin);/*chin=fgetc(fin);*/*对空格符、水平制表符进行处理*/else if (chin=' ')|(chin='t');/*对回车符进行处理*/else if (chin='n');/*对单引号内的字符常量进行处理*/else if (chin=target0)if (xx19=0)fout=fopen("key1.txt","a");fprintf(fout,"1t9tt%cn",target0);fclose(fout);xx19=1;temp0=chin;chin=fgetc(fin);temp1=chin;chin=fgetc(fin);if (chin!=target0)temp2=chin;chin=fgetc(fin);temp3=chin;temp4='0'elsetemp2=chin;temp3='0'c_search(temp);/*对双引号内的字符串常量进行处理*/else if (chin='"')int i=0;tempi+='"'chin=fgetc(fin);while (chin!='"')tempi+=chin;chin=fgetc(fin);tempi='"'tempi+1='0'cc_search(temp);/*对保留字、标识符进行处理*/else if (chin&gt='A')&&(chin&lt='Z')|(chin&gt='a')&&(chin&lt='z')|(chin='_')int i=0;while (chin&gt='A')&&(chin&lt='Z')|(chin&gt='a')&&(chin&lt='z')|(chin='_')|(chin&gt='0')&&(chin&lt='9')tempi+=chin;chin=fgetc(fin);tempi='0'char_search(temp);if (chin!=EOF)fseek (fin,-1L,SEEK_CUR);/*对整型、浮点型数据进行处理*/else if (chin&gt='0')&&(chin&lt='9')int dotcount=0;int i=0;while (chin&gt='0')&&(chin&lt='9')|(chin='.')if (chin='.')dotcount+;if (dotcount=2)break;tempi+=chin;chin=fgetc(fin);tempi='0'if (dotcount=1)intb_search(temp);elseinta_search(temp);if (chin!=EOF)fseek (fin,-1L,SEEK_CUR);/*对注释进行处理*/else if (chin='/')chin=fgetc(fin);if (chin='=')fout=fopen("output.txt","a");fprintf(fout,"2t30tt/=n");fclose(fout);else if (chin!='*')fout=fopen("output.txt","a");fprintf(fout,"2t4tt/n");fclose(fout);fseek(fin,-1L,SEEK_CUR);else if (chin='*')count=0;chin=fgetc(fin);fout=fopen("defination.txt","a");fprintf(fout,"/*");while (count!=2)count=0;while (chin!='*')fprintf(fout,"%c",chin);chin=fgetc(fin);count+;fprintf(fout,"%c",chin);chin=fgetc(fin);if (chin='/')count+;fprintf(fout,"%cn",chin);elsefprintf(fout,"%c",chin);chin=fgetc(fin);/*对运算符、分隔符进行处理*/elseint time=0;int firstblood=0;temp0=chin;chin=fgetc(fin);if (chin!=EOF)temp1=chin;temp2='0'for (time=1;time&lt=30;time+)if (strcmp(temp,key2time)=0)firstblood=1;if (xx2time=0)fout=fopen("key2.txt","a");fprintf(fout,"2t%dtt%sn",time,temp);fclose(fout);xx2time=1;fout=fopen("output.txt","a");fprintf(fout,"2t%dtt%sn",time,temp);fclose(fout);break;if (firstblood!=1)fseek(fin,-1L,SEEK_CUR);temp1='0'for (time=1;time&lt=9;time+)if (strcmp(temp,key1time)=0)if (xx1time=0)fout=fopen("key1.txt","a");fprintf(fout,"1t%dtt%sn",time,temp);fclose(fout);xx1time=1;fout=fopen("output.txt","a");fprintf(fout,"1t%dtt%sn",time,temp);fclose(fout);break;for (time=1;time&lt=30;time+)if (strcmp(temp,key2time)=0)if (xx2time=0)fout=fopen("key2.txt","a");fprintf(fout,"2t%dtt%sn",time,temp);fclose(fout);xx2time=1;fout=fopen("output.txt","a");fprintf(fout,"2t%dtt%sn",time,temp);fclose(fout);break;chin=fgetc(fin);fout=fopen("output.txt","a");fprintf(fout,"1t6ttn");fclose(fout);/* Main函数 */void mainFILE *fread;char charin;char command='Q'printf("n");printf("* C语言词法分析工具 *n");printf("* *n");printf("* *n");printf("* 命令如下: *n");printf("* 0 -&gt 查看保留字表文件 *n");printf("* 1 -&gt 查看分隔符表文件 *n");printf("* 2 -&gt 查看运算符表文件 *n");printf("* 3 -&gt 查看标识符表文件 *n");printf("* 4 -&gt 查看整数类型常量表 *n");printf("* 5 -&gt 查看浮点类型常量表 *n");printf("* 6 -&gt 查看字符类型常量表 *n");printf("* 7 -&gt 查看字符串类型常量表 *n");printf("* 8 -&gt 查看注释文件 *n");printf("* 9 -&gt 查看内部码文件 *n");printf("* - *n");printf("* Q -&gt 退出 *n");printf("*n");printf("n");load;scan;printf("n");printf("分析完成!n");getchar;printf("n");printf("请输入命令:");command=getchar;while (command!='Q')&&(command!='q')switch (command)case '0':printf("*n");printf("n");fread=fopen("key0.txt","r");charin=fgetc(fread);while (charin!=EOF)putchar(charin);charin=fgetc(fread);printf("n");printf("*n");printf("n");printf("请输入命令:");break;case '1':printf("*n");printf("n");fread=fopen("key1.txt","r");charin=fgetc(fread);while (charin!=EOF)putchar(charin);charin=fgetc(fread);printf("n");printf("*n");printf("n");printf("请输入命令:");break;case '2':printf("*n");printf("n");fread=fopen("key2.txt","r");charin=fgetc(fread);while (charin!=EOF)putchar(charin);charin=fgetc(fread);pr

    注意事项

    本文(C语言词法分析器 C语言 源代码.docx)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开