C++源代码单词扫描程序_第1页
C++源代码单词扫描程序_第2页
C++源代码单词扫描程序_第3页
C++源代码单词扫描程序_第4页
C++源代码单词扫描程序_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业院 系:计 算 机 学 院实验课程:编译原理实验实验项目:C+源代码单词扫描程序(词法分析)指导老师:黄煜廉实验项目C+源代码单词扫描程序(词法分析)实验要求C+源代码扫描程序识别C+记号。C+语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。打开一个C+源文件,打印出所有以上的记号。要求应用程序应为Windows界面。选作部分:为了提高C+源程序的可读性,C+程序在书写过程中加入了空行、空格、缩进、注释等。

2、假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C+源程序的压缩文本。因此,程序中还应该有这样的压缩功能。选作部分:进一步思考或实现如何进一步实现减小源文件大小的压缩功能。应该书写完善的软件文档。需求分析根据所需的功能程序应分为分析关键字、分析标识符、分析数字、分析串、分析注释、分析特殊字符和过滤多余字符几部分。关键字有iostream.h.main.while .goto include for break case if struct class等。过滤字符要考虑到空格和换行。实验代码#include #include #include #include

3、#include FILE *fp;char string(char c); /字符串处理char ch;char *operate6=+,-,*,/,+,-; char *note4=/,/*,*/,;char *symbol31=%,$,&,_,#,=,;char *keyword35=iostream.h,include,break,case,char,const,continue,default,do,double, else,enum,cin,float,for,goto,if,int,long,cout, return,short,signed,sizeof,static,stru

4、ct,switch,typedef, printf,union,unsigned,void,volatile,while,main; int search(char searchstr,int type) /符号匹配查找int i;switch (type)case 1:for(i=0;i35;i+) if(strcmp(keywordi,searchstr)=0) return 1; case 2:for(i=0;i=5;i+)if(strcmp(operatei,searchstr)=0)return 1;break;case 3: for(i=0;i31;i+) if(strcmp(sy

5、mboli,searchstr)=0) return 1; break;case 4: for(i=0;i=3;i+) if(!strcmp(notei,searchstr)&i=3) string(searchstr);break; else if(!strcmp(notei,searchstr)return 1; break;return 0;char letter(char ch)/字母处理int i=-1;char letter50;while (isalnum(ch)|ch=.) letter+i=ch;ch=fgetc(fp);letteri+1=0;if (search(lett

6、er,1)coutletter 关键字endl;elsecoutletter 标识符endl;return(ch);char number(char ch)/数字处理int i=-1;char num20;while (isdigit(ch)!=0)num+i=ch;ch=fgetc(fp);if(isalpha(ch)!=0)while(!isspace(ch)num+i=ch; ch=fgetc(fp);numi+1=0;coutnum错误!endl;goto loop;numi+1=0;coutnum 数字endl;loop: return(ch);char other(char ch)

7、int i=-1;char other1000;if (isspace(ch) /是空格ch=fgetc(fp);goto loop;while (!isspace(ch)&(!isalnum(ch) /不是空格 且不是字母或数字other+i=ch;ch=fgetc(fp); /若是字母,不是空格的判断没有写出来otheri+1=0;if (search(other,2)coutother 算数运算符endl;elseif (search(other,3)coutother 特殊符号endl;elseif (search(other,4)coutother 注释符endl;loop: ret

8、urn (ch);char string(char c)/字符串int i=0 ; /char ch;char stri100;strii=c0;ch=fgetc(fp);while (ch!=)stri+i=ch;ch=fgetc(fp);stri+i=ch;stri+i=0;coutstri 字符串endl;return(ch);int main ()char str,c;coutFileName;fp=fopen(FileName,r); if(fp=NULL)coutUnable to open file!endl;return 0;elsecoutOpen the file successfully!endl;coutfpendl;str=fgetc(fp); while (str!=EOF)if (isalpha(str)str=let

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论