- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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)
{
num[+
您可能关注的文档
- 2014公务员考试行测备考图形推理纸盒问题4大妙招.doc
- 201403二级C选择题题库.doc
- 2014八年级下册英语单词默写打印版.doc
- 2014 大学英语六级词汇表 带音标 完美打印版.doc
- 2014届全国高考理数答题卡.doc
- 2014年各类证书挂靠价格排名表一览.doc
- 2014年日历打印版1word.doc
- 2014年思想品德模拟试答题卡(二).doc
- 2014年历史中考冲刺试卷(一).doc
- 2014年高考英语第一轮复习:省略句.doc
- 北师大版小学数学三年级上册《寄书》教学设计.docx
- 统编版(部编版)语文二年级上册《雪孩子》教学设计.docx
- 统编版(部编版)语文二年级上册《八角楼上》教学设计.docx
- 北师大版小学数学三年级上册《长方形周长》教学设计.docx
- 北师大版小学数学三年级上册《丰收了》教学设计.docx
- 统编版(部编版)语文二年级上册《夜宿山寺》教学设计.docx
- 统编版(部编版)语文二年级上册《风娃娃》教学设计.docx
- 统编版(部编版)语文二年级上册《朱德的扁担》教学设计.docx
- 统编版(部编版)语文二年级上册《难忘的泼水节》教学设计.docx
- 统编版(部编版)语文二年级上册《纸船和风筝》教学设计.docx
文档评论(0)