




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度信用卡境外消费保障与汇率保护合同
- 二零二五年度宿舍安全责任与监督协议
- 二零二五年度劳动合同解除终止及员工职业发展服务协议
- 二零二五年度商业街场地租赁与商业运营管理合同
- 2025年度金融机构资金交易监管协议
- 2025年度沿街门面房租赁合同(含租赁双方市场风险分担及应对)
- 2025年度环保材料销售居间服务协议
- 二零二五年度内墙腻子市场推广与销售劳务协议
- 二零二五年度员工宿舍租赁及物业管理升级合同
- 二零二五年度办公用品买卖付款协议书
- DB15T 1417-2018 胶粉改性沥青及混合料设计与施工规范
- 简支梁、悬臂梁挠度计算程序(自动版)
- 2022年园林绿化养护技术标
- 聚合物的高弹性和黏弹性(凤山书屋)
- 物理人教版(2019)必修第二册5.2运动的合成与分解(共19张ppt)
- 中国航信离港系统讲义
- 6000m3内浮顶油罐设计
- 食堂管理考核评分表
- 滕启刚事迹PPT
- 企业信息安全培训课件
- 唤醒护理读书报告会ppt
评论
0/150
提交评论