C语言词法分析器设计与实现.doc

C语言词法分析器设计与实现.doc

ID:54492268

大小:70.50 KB

页数:14页

时间:2020-04-17

C语言词法分析器设计与实现.doc_第1页
C语言词法分析器设计与实现.doc_第2页
C语言词法分析器设计与实现.doc_第3页
C语言词法分析器设计与实现.doc_第4页
C语言词法分析器设计与实现.doc_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。