您所在位置: 网站首页 / C源代码单词扫描程序词法分析.docx / 文档详情
C源代码单词扫描程序词法分析.docx 立即下载
2024-11-07
约7.8千字
约13页
0
289KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

C源代码单词扫描程序词法分析.docx

C源代码单词扫描程序词法分析.docx

预览

免费试读已结束,剩余 8 页请下载文档后查看

20 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

需求分析
程序功能:
C++源代码扫描程序识别C++记号。

C++记号:
C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。

界面要求:
采用MFC界面实现。

文本压缩:
为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设想牺牲可读性,以节省磁盘空间,那么可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。

概要设计
关键字(67个):
asm,auto,bool,break,case,catch,char,class,const,continue,default,delete,do,double,else,enum,except,explicit,extern,false,finally,float,for,friend,goto,if,inline,int,long,mutable,namesapce,new,operator,private,protectde,public,register,return,short,signed,szieof,static,struct,string,switch,template,this,throw,true,try,typedef,typename,union,unsigned,using,virtual,void,while,main,std,cin,cout,endl,scanf,printf,include,define
一元运算符或分隔符(25个):
,;(){}#^?:.[]+-*/%=><!~|&
二元运算符或分隔符(19个):
&&||==>=<=!=++--::<<>>+=-=*=/=%=&=^=->



程序流程图:
主流程图:










词法分析模块流程图:

文本压缩模块流程图:

详细设计
词法分析模块:
//函数功能:扫描一行字符串识别C++记号
//函数参数:s表示C++源程序中的一行待分析的字符串
//参数返回值:无
voidanalyse(strings,LPVOIDIParam)
{
	CScanDlg*q=(CScanDlg*)IParam;//获取对话框指针
	charstr[300];//用于存储识别出的C++记号
	CStringSt;//将上面str变量从char类型转换为CString类型
	inti=0;//记录s字符串的移动的当前位置
	intj;//记录str字符串的当前位置
	if(note_flag)//过滤掉存在"/*.......*/"形式的屏蔽段
	{
			while(s[i]!='*'&&s[i]!='\0'||s[i]=='*'&&s[i+1]!='/')
//不存在"*/"串或当前串还没结束则s字符串的当前指针继续后移
			{
				i++;
			}
			if(s[i]!='\0')//遇到"*/",将标志note_flag置为false
			{
				i=i+2;
				note_flag=false;
			}
	}
	while(s[i]!='\0')//串没结束则循环扫描
	{
		if(s[i]==''||s[i]=='\t')//过滤空格和制表符
		{
			i++;
			continue;
		}
		if((s[i]=='<'||s[i]=='"')&&s[0]=='#')//对include预处理字符串中头文件名的处理
		{
			St.Format("%c",s[i]);
			q->m_list.InsertItem(count,St);//在列表控件中显示'<'或'"'字符
			St.Format("%s","特殊符号");
			q->m_list.SetItemText(count,1,St);
			count++;
			j=0;
			i++;
			while(s[i]!='>'&&s[i]!='"')
			{
				str[j]=s[i];
				j++;
				i++;
			}
			str[j]='\0';
			St.Format("%s",str);
			q->m_list.InsertItem(count,St);//在列表控件中显示头文件名
			St.Format("%s","关键字");
			q->m_list.SetItemText(count,1,St);
			count++;
			St.Format("%c",s[i]);
			q->m_list.InsertItem(count,St);//在列表空间中显示字符'>'或'"'
			St.Format("%s","特殊符号"
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

C源代码单词扫描程序词法分析

文档大小:289KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用