C++源代码单词扫描程序(词法分析).doc

C++源代码单词扫描程序(词法分析).doc

ID:53278538

大小:403.00 KB

页数:13页

时间:2020-04-02

C++源代码单词扫描程序(词法分析).doc_第1页
C++源代码单词扫描程序(词法分析).doc_第2页
C++源代码单词扫描程序(词法分析).doc_第3页
C++源代码单词扫描程序(词法分析).doc_第4页
C++源代码单词扫描程序(词法分析).doc_第5页
资源描述:

《C++源代码单词扫描程序(词法分析).doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、需求分析1、程序功能:C++源代码扫描程序识别C++记号。2、C++记号:C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。3、界面要求:采用MFC界面实现。4、文本压缩:为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设想牺牲可读性,以节省磁盘空间,那么可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。二、概要设计1、关键字(67个):asm,auto,bool,break,case,catch,char,class,const,continue

2、,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,un

3、signed,using,virtual,void,while,main,std,cin,cout,endl,scanf,printf,include,define2、一元运算符或分隔符(25个):,;(){}#^?:.[]+-*/%=>

4、&3、二元运算符或分隔符(19个):&&

5、

6、==>=<=!=++--::<<>>+=-=*=/=%=&=^=->1、程序流程图:(1)主流程图:(1)词法分析模块流程图:(2)文本压缩模块流程图:一、详细设计1、词法分析模块://函数功能:扫描一行字符串识别C++记号//函数参数:s表示C++源程序中的一行待分析的字符串//参数

7、返回值:无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]!=''

8、

9、s[i]=='*'&&s[i+1]!='/')//不存在"*/"

10、串或当前串还没结束则s字符串的当前指针继续后移{i++;}if(s[i]!='')//遇到"*/",将标志note_flag置为false{i=i+2;note_flag=false;}}while(s[i]!='')//串没结束则循环扫描{if(s[i]==''

11、

12、s[i]=='t')//过滤空格和制表符{i++;continue;}if((s[i]=='<'

13、

14、s[i]=='"')&&s[0]=='#')//对include预处理字符串中头文件名的处理{St.Format("%c",s[i]);q->m_list.InsertItem(count,St);

15、//在列表控件中显示'<'或'"'字符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]='';St.Format("%s",str);q->m_list.InsertItem(count,St);//在列表控件中显示头文件名St.Format("%s","关键字");q->m_list.SetItemText(count,1,St);count++;St.For

16、mat("%c",s[i]);q->m_list.InsertItem(count,St);//在列表空间中显示字符'>'或'"'St.Format("%s","特殊符号");q->m_list.SetItemText(count,1,St);count++;i++;}//是否是预处理串elseif(s[i]=='/'&&s[i+1]=='/')//过滤形式为"//"的注释段{i++;while(s[i]!=''){i++;}}//是否是注释elseif(s[i]=='/'&&s[i+1]=='*')//对第一次在串中以形式为"/*"

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。