文档介绍:C++源代码单词程序词法分析
C++源代码单词程序词法分析
C++源代码单词程序词法分析
需求分析
程序功能:
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++源代码单词程序词法分析
C++源代码单词程序词法分析
C++源代码单词程序词法分析
&& || == 〉= <= != ++ -— :: <〈 >〉 += —= *= /= %= &= ^= -〉
程序流程图:
主流程图:
C++源代码单词程序词法分析
C++源代码单词程序词法分析
C++源代码单词程序词法分析
词法分析模块流程图:
文本压缩模块流程图:
C++源代码单词程序词法分析
C++源代码单词程序词法分析
C++源代码单词程序词法分析
详细设计
词法分析模块:
//函数功能:扫描一行字符串识别C++记号
//函数参数:s表示C++源程序中的一行待分析的字符串
//参数返回值:无
void analyse(string s,LPVOID IParam)
{
ﻩCScanDlg *q=(CScanDlg*)IParam; //获取对话框指针
char str[300]; //用于存储识别出的C++记号
CString St; //将上面str变量从char类型转换为CString类型
int i=0; //记录s字符串的移动的当前位置
ﻩint j; //记录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') //串没结束则循环扫描
C++源代码单词程序词法分析
C++源代码单词程序词法分析
C++源代码单词程序词法分析
{
ﻩﻩif(s[i]==' ’||s[i]=='\t') //过滤空格和制表符
ﻩﻩ{
ﻩﻩ i++;
continue;
ﻩ }
ﻩ if((s[i]=='<’||s[i]==’”')&&s[0]=='#') //对include预处理字符串中头文件名的处理
ﻩﻩ{
ﻩﻩ ("%c”,