欢迎来到天天文库
浏览记录
ID:54492268
大小:70.50 KB
页数:14页
时间:2020-04-17
《C语言词法分析器设计与实现.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、> C语言词法分析器设计与实现 C语言词法分析器的设计与实现一.实验目的1.强化对系统软件综合工程实现能力、规划能力的训练;2.加强对词法分析原理、方法和基本实现技术的理解;二.实验内容用C语言(或C++)作为宿主语言完成: 其中具体要求:1.使用DFA实现词法分析器的设计;2.实现对C源程序中注释的过滤;3.利用两对半缓冲区从文件中逐一读取单词;4.词法分析结果属性字流存放在独立文件中;5.统计源程序每行单词的个数和整个源文件单词个数;6.具有报告词法错误和出错位置(源程序行号和该行字符)的功能;7.屏幕输出属性字流,每次显示10行,
2、按ESC可中途退出,每行有统计信息,最后有词法分析的全部信息,包括各种属性单词的个数。三.实验验收与评分要求 1.编写C语言词法分析器的源程序并调试通过;2.通过测试程序的验收(测试程序名称:Test-Lexcial); 3.提交简明扼要的书面实验报告。内容包括:FA设计;源程序主要函数功能;主要数据结构设计。四.验收测试用例1.测试用例一:统一验收测试用例;#include#includecharbuf[100],str[15];intcountdef=0;FILE*fpmiddle;struct
3、define{charwith[30];chardes[30];charfilename[15];}def[30];char*getFileName(){inti=0,k=0;for(i=0;buf[i]!='<'&&i<30&&buf[i]!=' ';i++);i++;while(buf[i]!='>'&&i<30&&buf[i]!=' ')str[k++]=buf[i++];str[k]=' ';puts(str);returnstr;}longreadline(FILE*fpt){if(fgets(buf,100,fpt)==NU
4、LL){puts(buf);printf("readlineerrororreachfileend!");return0;}puts(buf);return(long)(strlen(buf)+1);}voidwriteline(){fprintf(fpmiddle,"%s",buf);}voidprocessDefine(char*filename){inti=8,j=0;while((def[countdef].des[i-8]=buf[i])!='')i++;def[countdef].des[i-8]=' ';while((de
5、f[countdef].with[j]=buf[i])!=' '){i++;j++;}def[countdef].with[j-1]=' ';strcpy(def[countdef].filename,filename);countdef++;}longcomment(FILE*fpt){charprechar=buf[0],ch='*';inti=0,j=0;for(i=0;buf[i]!=' '&&!(buf[i]=='/'&&buf[i+1]=='*');i++);j=i;buf[i]=' ';if(i==strlen(buf)
6、)return0L;do{prechar=ch;if((ch=fgetc(fpt))==EOF){printf("incomment,end");exit(0);}i++;}while(!(prechar=='*'&&ch=='/'));return(long)(i-j+1);}isin(char*p){inti=0,j=0,temp=0;while(temp!=strlen(buf)){while(buf[i]!=' '&&buf[i]!=p[0])i++;temp=i;while(buf[i]==p[j]&&p[j]!=' '&&bu
7、f[i]!=' '){i++;j++;}if((i-temp)==strlen(p))returntemp;i=temp+1;j=0;}return-1;}voidincludeAndDefine(FILE*fpt){voidadd(char*);voidreplace(char*);while(readline(fpt)){if(isin("#include")>=0)add(getFileName());elseif(isin("#define")>=0)processDefine(str);else{fseek(fpt,comment
8、(fpt),1);replace(str);writeline();}}}voidadd(char*filename){voidreplace(char*);FIL
此文档下载收益归作者所有