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

下载本文档

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

文档简介

院 系:计 算 机 学 院实验课程:编译原理实验实验项目:C+源代码单词扫描程序(词法分析)指导老师:黄煜廉1 实验项目C+源代码单词扫描程序(词法分析)2 实验要求1. C+源代码扫描程序识别C+记号。C+语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。2. 打开一个C+源文件,打印出所有以上的记号。3. 要求应用程序应为Windows界面。4. 选作部分:为了提高C+源程序的可读性,C+程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C+源程序的压缩文本。因此,程序中还应该有这样的压缩功能。5. 选作部分:进一步思考或实现如何进一步实现减小源文件大小的压缩功能。6. 应该书写完善的软件文档。3 需求分析1. 根据所需的功能程序应分为分析关键字、分析标识符、分析数字、分析串、分析注释、分析特殊字符和过滤多余字符几部分。2. 关键字有iostream.h.main.while .goto include for break case if struct class等。3. 过滤字符要考虑到空格和换行。4 实验代码5 #include 6 #include 7 #include 8 #include 9 #include 10 FILE *fp;11 char string(char c); /字符串处理12 char ch;13 char *operate6=+,-,*,/,+,-; 14 char *note4=/,/*,*/,;15 char *symbol31=%,$,&,_,#,=,;17 char *keyword35=iostream.h,include,break,case,char,const,continue,default,do,double, 18 else,enum,cin,float,for,goto,if,int,long,cout, 19 return,short,signed,sizeof,static,struct,switch,typedef, printf,20 union,unsigned,void,volatile,while,main; 2122 int search(char searchstr,int type) /符号匹配查找23 24 int i;25 switch (type)26 27 case 1:for(i=0;i35;i+)28 29 if(strcmp(keywordi,searchstr)=0)30 return 1;31 32 33 case 2:34 35 for(i=0;i=5;i+)36 37 if(strcmp(operatei,searchstr)=0)38 return 1;39 40 break;41 42 case 3: for(i=0;i31;i+)43 44 if(strcmp(symboli,searchstr)=0)45 return 1;46 break;47 case 4: for(i=0;i=3;i+)48 49 50 if(!strcmp(notei,searchstr)&i=3) 51 52 string(searchstr);53 break;54 55 else if(!strcmp(notei,searchstr)56 return 1;57 58 break;59 60 return 0;61 6263 char letter(char ch)/字母处理64 65 int i=-1;66 char letter50;67 while (isalnum(ch)|ch=.) 68 69 letter+i=ch;70 ch=fgetc(fp);71 72 letteri+1=0;73 if (search(letter,1)74 75 coutletter 关键字endl;76 77 else78 79 coutletter 标识符endl;80 81 return(ch);82 838485 char number(char ch)/数字处理86 87 int i=-1;88 char num20;89 while (isdigit(ch)!=0)90 91 num+i=ch;92 ch=fgetc(fp);93 94 if(isalpha(ch)!=0)95 96 while(!isspace(ch)97 98 num+i=ch;99 ch=fgetc(fp);100 101 numi+1=0;102 coutnum错误!endl;103 goto loop;104 105 numi+1=0;106 coutnum 数字endl;107 loop: return(ch);108 109110111 char other(char ch)112 113 int i=-1;114 char other1000;115 if (isspace(ch) /是空格116 117 ch=fgetc(fp);118 goto loop;119 120 while (!isspace(ch)&(!isalnum(ch) /不是空格 且不是字母或数字121 122 other+i=ch;123 ch=fgetc(fp); /若是字母,不是空格的判断没有写出来124 125 otheri+1=0;126 if (search(other,2)127 coutother 算数运算符endl;128 else129 if (search(other,3)130 coutother 特殊符号endl;131 else132 if (search(other,4)133 coutother 注释符endl;134 loop: return (ch);135 136 char string(char c)/字符串137 138 int i=0 ;139 /char ch;140 char stri100;141 strii=c0;142 ch=fgetc(fp);143 while (ch!=)144 145 stri+i=ch;146 ch=fgetc(fp);147 148 stri+i=ch;149 stri+i=0;150 coutstri 字符串endl;151 return(ch);152 153 int main ()154 155 char str,c;156 coutFileName;159 fp=fopen(FileName,r); 160161162 if(fp=NULL)163 164 coutUnable to open file!endl;165 return 0;166 167 else168 169 coutOpen the file successfully!endl;170 coutfpendl;171 str=fgetc(fp); 172 while (str!=EOF)173 174 if (isalpha(str)175 str=letter(str);176 else177 178 if (isdigit(

温馨提示

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

评论

0/150

提交评论