C语言词法分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

南华大学计算机科学与技术学院实验报告(2015~2016学年度第2学期)课程名称程序语言设计与编译实验名称C语言词法分析器的设计与实现姓名鲍广明学号20144340218专业数媒班级2地点教师罗江琴南华大学计算机科学与技术学院实验报告1.实验目的及要求软件、硬件环境Win7,VisualStudioC++6.02.实验步骤实验分析:(1)关键字:ifelsewhiledocaseintbreak等所有的关键字都是小写。(2)运算符和界符:=+-*/===;()等(3)其他单词是标识符(ID)和整型常数(SUM),通过以下正规式定义:ID=_|letter(letter|digit)*NUM=digitdigit*(4)空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。(5)注释被忽略(6)各种单词符号对应的种别码(如下):单词符号种别码单词符号种别码auto1double2int3struct4break5else6long7switch8case9enum10register11typedef12char13extern14return15union16const17float18short19unsigned20南华大学计算机科学与技术学院实验报告continue21for22signed23void24default25goto26sizeof27volatile28do29while30static31if32\a33\b34\f35\n36\t37\v38\\39\?40\’41\”42\043\ddd44\xhh45数字46标识符47#48(49)50[51]52{53}54‘55*56:57~58%59^60+61?62南华大学计算机科学与技术学院实验报告=63|64&65!666768=69==7071!=7273&&74=75||76++77?=78-79--80-81“82%A(A可为d’s’c)83;84_85/868788899091其他类别993.实验内容实验流程图南华大学计算机科学与技术学院实验报告输入需要扫描的文件名输入扫描结果另存为的文件名判断文件是否为空预读一位ChCh是否为空格返回,结束程序否行计数器自加1Ch是否为字母或下划线跳转到扫描头文件单词及保留字Ch是否为数字或‘-’跳转到扫描数字Ch是否为‘/’Ch是否为引号跳转到扫描注释跳转到扫描引号是否是否否是是否否是跳转到扫描其他符号p处源代码:#includestdio.h#includestdlib.h#includectype.h#includestring.hvoidmain(){FILE*fp,*fp1;inthanjsq=1;intguanjz(charch1[]);charch,infile[15],outfile[15];printf(*****************Entertheinfilename*******************\n);scanf(%s,infile);printf(*****************Entertheoutfilename******************\n);scanf(%s,outfile);if((fp=fopen(infile,r))==NULL){printf(cannotopenfile\n);exit(0);}if((fp1=fopen(outfile,w))==NULL){南华大学计算机科学与技术学院实验报告printf(cannotopenfile\n);exit(0);}printf(\n*********************************************************\n);printf(*》开始进行词法分析《*\n);printf(*********************************************************\n);printf(\n*********************************************************\n);printf(行号字符串种别码\n);printf(*********************************************************\n);fprintf(fp1,*********************************************************\n);fprintf(fp1,行号字符串种别码\n);fprintf(fp1,*********************************************************\n);while(!feof(fp)){ch=fgetc(fp);if(ch==10)hanjsq++;/**********************扫描头文件单词及保留字***********************/if(isalpha(ch)||ch=='_'){inti=0;charch1[30];ch1[i++]=ch;while(!feof(fp)){ch=fgetc(fp);if(ch==10)hanjsq++;if(isalpha(ch)||isdigit(ch)||ch=='_'){ch1[i++]=ch;}if(ch=='.'){if((ch=fgetc(fp))=='h'){南华大学计算机科学与技术学院实验报告if(ch==10)hanjsq++;ch1[i++]='.';ch1[i++]='h';ch1[i]='\0';printf(line%d:%s83\n,hanjsq,ch1);fprintf(fp1,line%d:%s83\n,hanjsq,ch1);break;}else{fseek(fp,-1,1);//fp回退1ch1[i]='\0';printf(line%d:%s%d\n,hanjsq,ch1,guanjz(ch1));fprintf(fp1,line%d:%s%d\n,hanjsq,ch1,guanjz(ch1));break;}}if(!isalpha(ch)&&!isdigit(ch)&&ch!='_'&&ch!='.'){ch1[i]='\0';printf(line%d:%s%d\n,hanjsq,ch1,guanjz(ch1));fprintf(fp1,line%d:%s%d\n,hanjsq,ch1,guanjz(ch1));break;}}}/************************扫描数字*************************/if(isdigit(ch)||ch=='-'){if(isdigit(ch)){printf(line%d:%c,hanjsq,ch);fprintf(fp1,line%d:%c,hanjsq,ch);南华大学计算机科学与技术学院实验报告while(!feof(fp)){ch=fgetc(fp);if(isdigit(ch)||ch=='.'){printf(%c,ch);fprintf(fp1,%c,ch);}else{printf(46\n);fprintf(fp1,46\n);fseek(fp,-1,1);//回退一位ch='0';break;}}}if(ch=='-'){ch=fgetc(fp);if(ch=='-'){printf(line%d:--80\n,hanjsq);fprintf(fp1,line%d:--80\n,hanjsq);}if(ch==''){printf(line%d:-81\n,hanjsq);fprintf(fp1,line%d:-81\n,hanjsq);}if(isdigit(ch)){fseek(fp,-3,1);ch=fgetc(fp);南华大学计算机科学与技术学院实验报告if(isdigit(ch)){ch=fgetc(fp);printf(line%d:%c79\n,hanjsq,ch);fprintf(fp1,line%d:%c79\n,hanjsq,ch);}else{ch=fgetc(fp);printf(line%d:%c,hanjsq,ch);fprintf(fp1,line%d:%c,hanjsq,ch);while(!feof(fp)){ch=fgetc(fp);if(isdigit(ch)||ch=='.'){printf(%c,ch);fprintf(fp1,%c,ch);}else{printf(46\n);fprintf(fp1,46\n);fseek(fp,-1,1);break;}}}}}}/***********************扫描注释************************/if(ch=='/'){南华大学计算机科学与技术学院实验报告ch=fgetc(fp);if(ch==10)hanjsq++;if(ch=='/'){while(fgetc(fp)!=10);if(ch==10)hanjsq++;}if(ch=='*'){while(!feof(fp)){ch=fgetc(fp);if(ch==10)hanjsq++;if(ch=='*'){if((ch=fgetc(fp))=='/'){break;}}}}else{printf(line%d:/83\n,hanjsq);fprintf(fp1,line%d:/83\n,hanjsq);fseek(fp,-1,1);break;}}/***********************扫描引号************************/if(ch==''){inti=0;printf(line%d:%c82\n,hanjsq,ch);南华大学计算机科学与技术学院实验报告fprintf(fp1,line%d:%c82\n,hanjsq,ch);printf(line%d:,hanjsq);fprintf(fp1,line%d:,hanjsq);while(!feof(fp)){ch=fgetc(fp);i++;if(ch==10)hanjsq++;if(ch!=''){if(ch!=32){printf(%c,ch);fprintf(fp1,%c,ch);}}elsebreak;}printf(99\n);fprintf(fp1,99\n);fseek(fp,-i,1);for(;i0;i--){ch=fgetc(fp);if(ch==92){charch5[13]={abfntv\\?'\0};ch=fgetc(fp);for(intk=0;k12;k++){if(ch==ch5[k]){printf(line%d:\\%c%d\n,hanjsq,ch,k+33);fprintf(fp1,line%d:\\%c南华大学计算机科学与技术学院实验报告%d\n,hanjsq,ch,k+33);}}if(ch=='d'&&isdigit(fgetc(fp))&&isdigit(fgetc(fp))){fseek(fp,-2,1);printf(line%d:%c%c44\n,hanjsq,fgetc(fp),fgetc(fp));fprintf(fp1,line%d:%c%c44\n,hanjsq,fgetc(fp),fgetc(fp));}if(ch=='x'&&isdigit(fgetc(fp))&&isdigit(fgetc(fp))){fseek(fp,-2,1);printf(line%d:%c%c45\n,hanjsq,fgetc(fp),fgetc(fp));fprintf(fp1,line%d:%c%c45\n,hanjsq,fgetc(fp),fg

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功