C源代码单词扫描程序

上传人:人*** 文档编号:476697458 上传时间:2023-11-26 格式:DOC 页数:7 大小:73.50KB
返回 下载 相关 举报
C源代码单词扫描程序_第1页
第1页 / 共7页
C源代码单词扫描程序_第2页
第2页 / 共7页
C源代码单词扫描程序_第3页
第3页 / 共7页
C源代码单词扫描程序_第4页
第4页 / 共7页
C源代码单词扫描程序_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《C源代码单词扫描程序》由会员分享,可在线阅读,更多相关《C源代码单词扫描程序(7页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 院 系:计 算 机 学 院实验课程:编译原理实验实验项目:C+源代码单词扫描程序(词法分析)指导老师:黄煜廉实验项目C+源代码单词扫描程序(词法分析)一 实验要求1. C+源代码扫描程序识别C+记号。C+语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。2. 打开一个C+源文件,打印出所有以上的记号。3. 要求应用程序应为Windows界面。4. 选作部分:为了提高C+源程序的可读性,C+程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮

2、一个删除了所有不必要空格和注释的C+源程序的压缩文本。因此,程序中还应该有这样的压缩功能。5. 选作部分:进一步思考或实现如何进一步实现减小源文件大小的压缩功能。6. 应该书写完善的软件文档。三 需求分析1. 根据所需的功能程序应分为分析关键字、分析标识符、分析数字、分析串、分析注释、分析特殊字符和过滤多余字符几部分。2. 关键字有iostream.h.main.while .goto include for break case if struct class等。3. 过滤字符要考虑到空格和换行。四 实验代码#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,shor

4、t,signed,sizeof,static,struct,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+

5、)三十五 三十六 if(strcmp(operatei,searchstr)=0)三十七 return 1;三十八 三十九 break;四十 四十一 case 3: for(i=0;i31;i+)四十二 四十三 if(strcmp(symboli,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,sea

6、rchstr)五十五 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(letter,1)七十三 七十四 coutletter 关键字endl;七十五 七十六 else七十七 七十八 coutletter 标识符endl;七十九

7、八十 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;一五 coutnu

8、m 数字endl;一六 loop: return(ch);一七 一八一九一一 char other(char ch)一一一 一一二 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(oth

9、er,2)一二六 coutother 算数运算符endl;一二七 else一二八 if (search(other,3)一二九 coutother 特殊符号endl;一三 else一三一 if (search(other,4)一三二 coutother 注释符endl;一三三 loop: return (ch);一三四 一三五 char string(char c)/字符串一三六 一三七 int i=0 ;一三八 /char ch;一三九 char stri100;一四 strii=c0;一四一 ch=fgetc(fp);一四二 while (ch!=)一四三 一四四 stri+i=ch;一四

10、五 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;一六五 一六六 else一六七 一六八 coutOpen the file successfully!endl;一六九 coutfpendl;一七 str=fgetc(fp); 一七一 while (str!=EOF)一七二 一七三 if (isalpha(str)一七四 str=letter(str);一七五 else一七六 一七七 if (isdigit(str)一七八 str=number(str);一七九 else一八 str=other(str);一八一 一八二 一八三 coutendlendl;一八四 一八五 一八六 c=getch();一八七 return 0;一八八 一八九 运行结果1. 成功运行2. 未找到文件时一九 参考文献编译原理及实践C+程序设计 /

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号