- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C源代码单词扫描程序
院 系:计 算 机 学 院
实验课程:编译原理实验
实验项目:C++源代码单词扫描程序(词法分析)
指导老师:黄煜廉
实验项目
C++源代码单词扫描程序(词法分析)
实验要求
C++源代码扫描程序识别C++记号。C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。
打开一个C++源文件,打印出所有以上的记号。
要求应用程序应为Windows界面。
选作部分:为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。
选作部分:进一步思考或实现——如何进一步实现减小源文件大小的压缩功能。
应该书写完善的软件文档。
需求分析
根据所需的功能程序应分为分析关键字、分析标识符、分析数字、分析串、分析注释、分析特殊字符和过滤多余字符几部分。
关键字有iostream.h.main.while .goto include for break case if struct class等。
过滤字符要考虑到空格和换行。
实验代码
#include iostream.h
#include stdio.h
#include string.h
#include ctype.h
#include conio.h
FILE *fp;
char string(char c[]); //字符串处理
char ch;
char *operate[6]={+,-,*,/,++,--};
char *note[4]={//,/*,*/,\};
char *symbol[31]={%,$,^,,_,#,,=,=,,=,,,==,!=,,||,!,
,,;, :=, ., (, ), {, },,||,!,(),};
char *keyword[35]={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,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(keyword[i],searchstr)==0)
return 1;
}
case 2:
{
for(i=0;i=5;i++)
{
if(strcmp(operate[i],searchstr)==0)
return 1;
}
break;
}
case 3: for(i=0;i31;i++)
{
if(strcmp(symbol[i],searchstr)==0)
return 1;
}break;
case 4: for(i=0;i=3;i++)
{
if(!strcmp(note[i],searchstr)i==3)
{
string(searchstr);
break;
}
else if(!strcmp(note[i],searchstr))
return 1;
}break;
}
return 0;
}
char letter(char ch)//字母处理
{
int i=-1;
char letter[50];
while (isalnum(ch)||ch==.)
{
letter[++i]=ch;
ch=fgetc(fp);
}
letter[i+1]=\0;
if (search(letter,1))
{
coutletter 关键字endl;
}
else
{
coutletter 标识符endl;
}
return(ch);
}
char number(char ch)//数字处理
{
int i=-1;
char num[20];
while (isdigit(ch)!=0)
{
n
您可能关注的文档
最近下载
- 《信用卡营销策略》课件.ppt VIP
- 2024年全国高考数学真题分类(-三角函数与解三角形)汇编(附答案).pdf VIP
- 班会课件不说脏话.pptx VIP
- 吊篮施工安全技术管理交流.ppt VIP
- 高速数字电路设计及EMC设计(华为)..doc VIP
- (完整word版)糖尿病酮症酸中毒抢救预案及流程.docx VIP
- 自考03709马克思主义基本原理概论(2023年高教版)全书知识点汇总.pdf VIP
- 园区物业服务投标方案.doc VIP
- 湖泊(水库)富营养化评价方法及分级计算.xls VIP
- TZS 0678—2025《生物安全实验室工作人员本底血清样本管理规范》(水印版).pdf VIP
文档评论(0)