![词法分析器文档_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b931.gif)
![词法分析器文档_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b932.gif)
![词法分析器文档_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b933.gif)
![词法分析器文档_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b934.gif)
![词法分析器文档_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-8/5/4dce40e3-1fab-4574-a456-1931ffb96b93/4dce40e3-1fab-4574-a456-1931ffb96b935.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、词法分析程序文档说明:该词法分析器实现对C语言源代码进行词法分析的功能,由文件输入,将输入的源代码输出为token序列,用二元组形式由文件和屏幕输出,文件输出首先输入源文件路径和文件名称,将注释过滤,能够报告不合法字符,并且记录源代码的行数,单词数(包括关键字,标识符和常量)和字符数(包括字母,数字,标点符号,运算符,空格和换行符)。程序设计:具体见源代码源代码:#include #include #include #include using namespace std;#define MAX 32char ch = ;int line=1,zifu=1,word=0;/*line记录行数z
2、ifu记录字符数(包括字母,数字,标点符号,运算符,空格和换行符)word记录单词数(包括关键字,标识符和常量)*/ string key32= 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, union,unsigned,void,volatile,while ;/c语言中的所有关键字int Iskey(stri
3、ng c) /关键字判断 int i; for(i=0; iMAX; i+) if(pare(c)=0) /将字符串与关键字一一进行比较 return 1; return 0;int IsLetter(char c) /判断是否为字母 if(c=a)|(c=A) return 1; else return 0;int IsDigit(char c) /判断是否为数字 if(c=0&c=9) return 1; else return 0;void analyse(FILE *fpin,FILE *fpout) string arr=;string str=; while(ch=
4、fgetc(fpin)!=EOF) zifu+;/将文件中的字符逐一进行扫描,包括字母,数字,标点符号,运算符,空格和换行符 arr=; if(IsLetter(ch)/对开头是字母或数字的字符串进行判断 while(IsLetter(ch)|IsDigit(ch)|ch=_)/符合标识符或者关键字标准的字符串进行判断 if(ch=A) ch=ch+32; arr=arr+ch;/将每个单个读取的字符连成字符串 ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR);/不满足条件的多读取的字符回退一格 if (Iskey(arr)/判断字符串是否是关键字 fprint
5、f(fpout,(%s %s)n,arr.c_str(),key); printf(%s %s)n,arr.c_str(),key);word+; else/字符串不是关键字则判定为标识符 fprintf(fpout,(%s %s)n,arr.c_str(),id); printf(%s %s)n,arr.c_str(),id);word+; else if(IsDigit(ch)/开头为数字的串即为常量 while(IsDigit(ch)|ch=.&IsDigit(fgetc(fpin) arr=arr+ch; ch=fgetc(fpin); fseek(fpin,-1L,SEEK_CUR)
6、; fprintf(fpout,(%s %s)n,arr.c_str(),num); printf(%s %s)n,arr.c_str(),num);word+; else switch(ch)/既不是数字也不是字母的符号判定 case+: ch=fgetc(fpin);/判定+,+=,+ if(ch=+) fprintf(fpout,(%s %s)n,+,-); printf(%s %s)n,+,-);zifu+; if(ch=) fprintf(fpout,(%s %s)n,+=,-); printf(%s %s)n,+=,-);zifu+; else fprintf(fpout,(%s
7、%s)n,+,-); printf(%s %s)n,+,-); fseek(fpin,-1L,SEEK_CUR); break; case- : ch=fgetc(fpin); if(ch=-)/判定-,-=,- fprintf(fpout,(%s %s)n,-,-); printf(%s %s)n,-,-);zifu+; if(ch=) fprintf(fpout,(%s %s)n,-=,-); printf(%s %s)n,-=,-);zifu+; else fprintf(fpout,(%s %s)n,-,-); printf(%s %s)n,-,-); fseek(fpin,-1L,S
8、EEK_CUR); break; case* : fprintf(fpout,(%s %s)n,*,-); printf(%s %s)n,*,-); break; case= : ch=fgetc(fpin);/判定=,= if(ch=) fprintf(fpout,(%s %s)n,=,-); printf(%s %s)n,=,-);zifu+; else fprintf(fpout,(%s %s)n,=,EQ); printf(%s %s)n,=,EQ); fseek(fpin,-1L,SEEK_CUR); break; case/ : ch=fgetc(fpin);/判定是注释还是运算符
9、/ if(ch=*)/形如/* */的注释,将注释过滤 zifu-; ch=fgetc(fpin); while(ch!=*)&(ch=fgetc(fpin)=/) ; else if(ch=/)/形如/的注释,将注释过滤 zifu-; ch=fgetc(fpin); while(ch!=n) ch=fgetc(fpin);line+; else fprintf(fpout,(%s %s)n,/,-); printf(%s %s)n,/,-); fseek(fpin,-1L,SEEK_CUR); break; case %: fprintf(fpout,(%s %s)n,%,-); print
10、f(%s %s)n,%,-); break; case #: fprintf(fpout,(%s %s)n,#,-); printf(%s %s)n,#,-); break; case !: ch=fgetc(fpin);/判定!=还是! if(ch=) fprintf(fpout,(%s %s)n,!=,-); printf(%s %s)n,!=,-);zifu+; else fprintf(fpout,(%s %s)n,!,-); printf(%s %s)n,!,-); fseek(fpin,-1L,SEEK_CUR); break; case |: ch=fgetc(fpin); if
11、(ch=|)/判定|还是| fprintf(fpout,(%s %s)n,|,-); printf(%s %s)n,|,-);zifu+; else fprintf(fpout,(%s %s)n,|,-); printf(%s %s)n,|,-); fseek(fpin,-1L,SEEK_CUR); break; case &: ch=fgetc(fpin); if(ch=&)/判定&还是& fprintf(fpout,(%s %s)n,&,-); printf(%s %s)n,&,-);zifu+; else fprintf(fpout,(%s %s)n,&,-); printf(%s %s
12、)n,&,-); fseek(fpin,-1L,SEEK_CUR); break; case( : fprintf(fpout,(%s %s)n,(,-); printf(%s %s)n,(,-); break; case) : fprintf(fpout,(%s %s)n,),-); printf(%s %s)n,),-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case; :
13、fprintf(fpout,(%s %s)n,;,-); printf(%s %s)n,;,-); break; case. : fprintf(fpout,(%s %s)n,.,-); printf(%s %s)n,.,-); break; case, : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); break; case : fprintf(fpout,(%s %s)n,-); printf(%s %s)n,-); brea
14、k; case :fprintf(fpout,(%s %s)n,引号,-); printf(%s %s)n,引号,-); break; case ?: fprintf(fpout,(%s %s)n,?,-); printf(%s %s)n,?,-); break; case: : fprintf(fpout,(%s %s)n,:,-); printf(%s %s)n,:,-); break; case : ch=fgetc(fpin); if(ch=)/判定=还是 fprintf(fpout,(%s %s)n,=,GE); printf(%s %s)n,=,GE);zifu+; else fp
15、rintf(fpout,(%s %s)n,GT); printf(%s %s)n,GT); fseek(fpin,-1L,SEEK_CUR); break; case : ch=fgetc(fpin);/判定=还是还是 if(ch=) fprintf(fpout,(%s %s)n,=,LE); printf(%s %s)n,) fprintf(fpout,(%s %s)n,NE); printf(%s %s)n,NE); zifu+; else fprintf(fpout,(%s %s)n,LT); printf(%s %s)n,LT); fseek(fpin,-1L,SEEK_CUR); break; case : break; case n: line+;/每读到n,记录行数 break; default : fprintf(fpout,(%c %s)n,ch,不合法); printf(%c %s)n,ch,不合法); break; int main() char in_fn30; FILE * fpin,*fpout; fpout = fopen(playov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆外语外事学院《生物材料评价与监督管理》2023-2024学年第二学期期末试卷
- 中国矿业大学徐海学院《机电传动与控制》2023-2024学年第二学期期末试卷
- 兰考三农职业学院《健康管理与干预能力的理论与实践》2023-2024学年第二学期期末试卷
- 滁州城市职业学院《公共财政学》2023-2024学年第二学期期末试卷
- 山西老区职业技术学院《魅力化学》2023-2024学年第二学期期末试卷
- 晋中学院《制图辅导》2023-2024学年第二学期期末试卷
- 物理治疗学模考试题(附参考答案)
- 汉口学院《动物传染病学》2023-2024学年第二学期期末试卷
- 方剂模拟考试题+答案
- 武汉商学院《建筑信息模型》2023-2024学年第二学期期末试卷
- 智慧农业整体解决方案
- 总经理权责授权书
- 家具厂规章制度
- 三查四定管理制度(参考模板)
- 火龙罐治疗面瘫患者针对性护理的有效性研究
- 2023玻纤增强聚氨酯门窗工程技术规程
- 《体育与健康教学改革指导纲要》的时代意义、内容特征和践行路径兼论新时代学校体育的走向
- 员工宿舍检查表
- 品质部经理KRA KPI考核表
- 一年级综合实践小小医院
- 电子商务客户服务(第2版)中职PPT完整全套教学课件
评论
0/150
提交评论