亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? word.cpp

?? 1、編譯原理的詞法分析 2、根據輸入的文件
?? CPP
字號:
#include ".\word.h"
#using <mscorlib.dll>

Word::Word(void)
{inword="void main int short char float double long unsigned struct sizeof auto static register extern typedef union enum if else  goto while do switch case  return break continue for";
 sign="+ - * / % ++ -- += -= *= /= %= = [ ] & ^ | ~ << >> ! ? : < >  . && || == >= <=  ->";
 marco="#define #undefine #endif #include #ifdef #else #ifndef";
 bound="; { } ( ) \" \' , ";
 word[0]='\0';
 flag=0;//默認不寫入程序源碼注釋
 flagto_txt=0;//注釋形式 /* */  的開關
}

bool Word::setFlag()
{
	flag=!flag;return 1;
}
bool Word::isSign(char frist,char second)
//功能:檢查字符是不是屬于運算符集  不是返回0  是返回1
{	
	char arry[3];
	arry[0]=frist;
	arry[1]=second;
	arry[2]='\0';
	//cout<<arry<<endl;getch();
	if(sign.isIn(arry)) return 1;
	else return 0;
}
bool Word::isBound(char data)
//功能:判斷字符是否是界符,是返回1 否則返回0 
{
	char arry[2];
	arry[0]=data;
	arry[1]='\0';
	if(bound.isIn(arry)) return 1;
	else return 0;
}
bool Word::isMarco(char *arry)
//功能:判斷是否是預編譯命令 是返回1 否則返回 0 
{	
	if(marco.isIn(arry) ) return 1;
	else return 0;
}
bool Word::isInWord(char *arry)
//檢查字符串是否是保留字 是返回1  不是返回 0
{
	if(inword.isIn(arry) ) return 1;
	else return 0;
}
bool Word::isNum(char data)
{//判斷是否是數字字符
	if(data>='0'&&data<='9') return 1;
	else return 0;
}
bool Word::isWord(char data)
{//判斷是否是字母
	if( (data>='a'&&data<='z')||(data>='A'&&data<='Z') ) return 1;
	else return 0;
}

bool Word::outPut(char *word,char *strings)
{
	//功能:將word和strings指向的字符串寫入文件
	outfile.write(word,strlen(word));// write to file
	outfile.put('\t');//寫入一個制表符
	if(strings)outfile.write(strings,strlen(strings));
	outfile.put(10);//寫入一個回車
	return 1;
}
bool Word::outPut(char data,char *strings)
{	//功能:將字符data寫進文件
	outfile.put(data);
	outfile.put('\t');
	outfile.write(strings,strlen(strings));
	outfile.put(10);
	return 1;
}
bool Word::outPut(char data1,char data2,char *strings)
{	
	//將字符data1和字符data2和屬性文字strings寫進文件
	outfile.put(data1);
	outfile.put(data2);
	outfile.put('\t');
	outfile.write(strings,strlen(strings));
	outfile.put(10);
	return 1;
}

bool Word::infIn()
{	outputfilename[0]='\0';
	ifstream infile;//輸入文件流對象
	char filename[30];//存放文件名
	cout<<"[輸入一個供分析的C語言源文件:]"<<endl;
	cout<<"	[源程序文件名]:";
	cin>>filename;
	infile.open(filename,ios_base::in);
	if(infile==NULL)
	{
		cout<<"	[打開源文件失敗]:請檢查文件名是否輸入正確.";getch();return 0;
	}
	cout<<"[輸入保存分析結果的文件名:]"<<endl;
	while(1)
	{
		cout<<"	[保存到文件]:";
		cin>>outputfilename;
		ifstream outtext(outputfilename,ios_base::in);
		if(outtext)
		{
			cout<<"	[警告]:文件已經存在,要覆蓋嗎?[y/n]";
			char c;
			c=getch();
			if(c=='y'){outtext.close();break;}//同意覆蓋
			continue;//重新輸入文件名
		}
		outtext.close();
		break;
	}//while(1)
	//將輸入的文件名與私有數據 ofstream outfile 掛鉤
	outfile.open(outputfilename,ios_base::out);
	if(!outfile)
	{
		cout<<"[錯誤]:輸出文件創建失敗."<<endl;getch();exit(0);
	}
	outPut("[詞法分析的結果]");
	outPut("[分析 的 文 件:]",filename);
	outPut("[當  前  文 件:]",outputfilename);
	outPut("[分析結 果如下:]");
	char linebuffer[81];//行緩沖區
	
	system("cls");
	cout<<"[開始對文件進行分析:]"<<endl;
	while(infile.good() )
	{
		infile.getline(linebuffer,80,10);	//讀一行到行緩沖區
		cout<<"//"<<linebuffer<<endl;
		if(flag) outPut("//",linebuffer);
		//cout<<endl;
		wordAnalyze(linebuffer);			//對這一行做詞法分析
	}
	//getch();
	infile.close();
	outfile.close();
	return 1;
}

bool Word::wordAnalyze(char *line)
{//功能:對一行做詞法分析
	if( strlen(line) == 0) return 1;//不對空行做詞法分析

	char *p;
	bool sign=0;
	p=line;
	int i;

	while(*p)
	{
		if(*p==' '||*p==10||*p=='\t'){p++;continue;}//過濾空格和回車符
		if(*p=='/'&& *(p+1)=='/') return 1;//過濾掉注釋
		if(*p=='/'&& *(p+1)=='*') 
		{
			flagto_txt=!flagto_txt;p=p+2;
		}
		if(flagto_txt)
		{
			while(*p&& !( *p=='*' && *(p+1)=='/') ) p++;
			if(! *p) return 0;//還沒有出現與/* 匹配的 */ 返回
			flagto_txt=!flagto_txt;//出現與/*匹配的*/ 繼續
			p=p+2;//跳過 */
			if(! *p) return 1;
		}
		if(*p=='#')
		{
			i=0;
			while(*p!=' '&&*p && *p!='<')
			{
				word[i]=*p;
				p++;i++;
			}
			word[i]='\0';
			if(marco.isIn(word)) 
			{
				cout<<word<<"			"<<"預編譯命令"<<endl;
				outPut(word,"預編譯命令");
			}
			else 
			{
				cout<<word<<"			"<<"非法形式"<<endl;
				outPut(word,"非法形式");
			}
			if(! *p) return 1;
			else continue;
		}
		else if( isWord(*p) ) //是字母
		{	i=0;			
			while(isWord(*p) && *p )//是保留字或者是標識符
			{
				word[i]=*p;
				p++;i++;
			}
			if(*p=='_')
				while(*p!=' '&&*p!=10&& *p&&!isBound(*p) )
				{
					word[i]=*p;
					p++;i++;
				}
			word[i]='\0';//分離出一個詞
			//cout<<word<<endl;getch();
			if(isInWord(word))
			{
				cout<<word<<"			"<<"保留字"<<endl;
				outPut(word,"保留字");
			}
			else	
			{
				outPut(word,"標識符或者過程名");
				cout<<word<<"			"<<"標識符或過程名"<<endl;
			}
				continue;
		}//else if
		else if( isNum(*p) )//是數字
		{	i=0;
			while(*p=='.'||isNum(*p) )
			{	
				word[i]=*p;
				i++;
				p++;
			}
			if(*p=='_')
			{
				while(*p!=' '&&*p!=10 && *p&& !isSign(*p) )
				{
					word[i]=*p;
					p++;i++;
				}
				word[i]='\0';
				cout<<word<<"			"<<"字符常量或標識符"<<endl;//分離出數
				outPut(word,"字符常量或標識符");
			}
			else
			{
				word[i]='\0';
				cout<<word<<"			數據常量"<<endl;
				outPut(word,"數據常量");
			}
			continue;
		}//else if
		else if(isSign(*p))				//是運算符
		{	if( *(p+1) && isSign( *p,*(p+1))) //雙字符運算符
			{
				cout<<*p<<*(p+1)<<"			"<<"運算符"<<endl;
				outPut(*p,*(p+1),"運算符");
				p=p+2;
				continue;
			}
			else//單字符運算符
			{
				cout<<*p<<"			"<<"運算符"<<endl;
				outPut(*p,"運算符");
				p++;
				//getch();
			}//else
			if(!*p) return 1;//完成
			continue;
		}//if
		else if(isBound(*p)) //如果是分界符
		{
			if(*p=='\"')
				{	cout<<*p<<"			分界符"<<endl;
					outPut(*p,"分界符");
					sign=!sign;//引號開關 1:前引號  0 后引號
					if(sign)
					{	i=0;
						p++;//跳過前引號
						while(*p!='\"'&&*p!=10)
						{
							word[i]=*p;
							p++;i++;
						}
						word[i]='\0';
						cout<<word<<"			字符串常量"<<endl;
						outPut(word,"字符串常量");
					}//if
					if(*p=='\"')
					{	cout<<*p<<"			分界符"<<endl;
						outPut(*p,"分界符");
						p++;//跳過后引號
					}
				}//if
			else 
			{
				cout<<*p<<"			分界符"<<endl;
				outPut(*p,"分界符");
				p++;
			}
			if(! *p) return 1;
			else continue;
		}//else if
		else if(*p=='_')
		{	i=0;
			while(*p!=' '&& *p!=10 && *p &&!isSign(*p) )
			{
				word[i]=*p;
				p++;i++;
			}
			word[i]='\0';
			cout<<word<<"			字符常量或標識符"<<endl;
			outPut(word,"字符常量或標識符");
			continue;
		}
		else 
		{	if(*p!=10) cout<<*p<<"			"<<"非法字符"<<endl;
			outPut(*p,"非法字符");
			p++;
		}//else
	}//while(*p);
	return 1;
}

bool Word::forMain()
{
	char c[10];
	while(1)
	{
		system("cls");
		cout<<"		[C語言詞法分析程序]"<<endl;
		cout<<"		[孤單北半球@2005_12_28]"<<endl;
		cout<<"		[go]	詞法分析."<<endl;
		cout<<"		[exit]	退出."<<endl;
		cout<<"		[detel]	是否向輸出文件寫入注釋形式的源碼."<<endl;	
		cout<<"□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□"<<endl;
		if(flag)cout<<"		[細節顯示]"<<endl;
		else cout<<endl;
		cout<<"		[輸入命令]:";
		cin>>c;
		if(strcmp(c,"go")==0)  
		{	system("cls");
			cout<<"[詞法分析:]"<<endl;
			infIn();
			cout<<"[任意鍵返回到菜單...]";
			getch();
		} 
		else if(strcmp(c,"exit")==0)break;
		else if(strcmp(c,"detel")==0) setFlag();
		else 
		{
			cout<<"[錯誤]:"<<c<<"不是一個預定的命令";
			getch();
		}
	}//while(1)
	return 1;
}//forMain();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产剧情av麻豆香蕉精品| 国产精品国产三级国产aⅴ中文 | 亚洲丰满少妇videoshd| 日韩三级电影网址| 91香蕉国产在线观看软件| 粉嫩欧美一区二区三区高清影视| 亚洲精品美腿丝袜| 久久精品欧美日韩| 欧美一级高清片| 色综合久久六月婷婷中文字幕| 国产精品中文有码| 麻豆91在线看| 天堂久久久久va久久久久| 亚洲人成网站在线| 国产精品盗摄一区二区三区| 国产精品无遮挡| 精品中文av资源站在线观看| 欧美在线免费视屏| 久久99精品视频| 椎名由奈av一区二区三区| 欧美无人高清视频在线观看| 日韩精品一区第一页| 日本一区二区不卡视频| 91精品国产91热久久久做人人| 亚洲一区二区三区视频在线| 丰满白嫩尤物一区二区| 亚洲另类在线制服丝袜| 国产精品乱码久久久久久| 久久久久久久久一| 精品国产伦一区二区三区观看方式| 欧美老女人在线| 欧美美女一区二区在线观看| 欧美丝袜第三区| 亚洲精品v日韩精品| 久久99精品久久久久婷婷| 国产精品国产馆在线真实露脸| 久久婷婷色综合| 亚洲精品一区二区在线观看| 精品国免费一区二区三区| 亚洲精品在线免费观看视频| 久久综合久久综合久久综合| 久久先锋影音av| 久久久影院官网| 亚洲国产高清aⅴ视频| 欧美国产乱子伦 | 日本欧美大码aⅴ在线播放| 国产毛片精品国产一区二区三区| 美女国产一区二区三区| 黑人巨大精品欧美一区| 国产二区国产一区在线观看| 成人国产在线观看| 91麻豆免费看| 欧美日本精品一区二区三区| 日韩欧美成人激情| 欧美国产视频在线| 亚洲欧洲无码一区二区三区| 一区二区高清视频在线观看| 日韩vs国产vs欧美| 国产精品综合视频| 91天堂素人约啪| 欧美美女黄视频| 欧美一区二区三区思思人| 精品国产精品一区二区夜夜嗨| 久久国产精品露脸对白| 一本色道综合亚洲| 欧美在线三级电影| 日韩视频永久免费| 国产亲近乱来精品视频| 一区二区三区在线免费观看| 亚洲不卡av一区二区三区| 精一区二区三区| 欧美久久久久免费| 久久综合久久99| 中文字幕日韩av资源站| 亚洲国产另类精品专区| 韩国女主播成人在线| 91视频在线看| 精品美女一区二区三区| 亚洲日本成人在线观看| 久久精品久久久精品美女| 99vv1com这只有精品| 欧美一级生活片| 1区2区3区国产精品| 美国毛片一区二区三区| 91小视频在线免费看| 日韩一区二区三区高清免费看看| 欧美激情艳妇裸体舞| 日韩激情一二三区| 日韩av一二三| 乱中年女人伦av一区二区| 精品在线播放午夜| 日韩精品电影一区亚洲| 亚洲成在线观看| 高潮精品一区videoshd| 欧美精品久久99久久在免费线| 亚洲国产精品传媒在线观看| 日韩av在线播放中文字幕| 成人免费视频caoporn| 3d动漫精品啪啪| 亚洲欧美色一区| 床上的激情91.| 日韩美女主播在线视频一区二区三区| 自拍偷拍亚洲激情| 国产精品77777| 日韩午夜电影在线观看| 伊人婷婷欧美激情| 成人午夜激情片| 精品999在线播放| 日韩激情中文字幕| 欧美视频第二页| 亚洲女同一区二区| www.66久久| 欧美国产激情二区三区 | 国产精品国产三级国产三级人妇| 激情欧美一区二区| 日韩欧美成人一区二区| 视频在线观看一区| 欧美亚洲愉拍一区二区| 中文字幕一区二区三区色视频| 风流少妇一区二区| 久久久www免费人成精品| 狠狠v欧美v日韩v亚洲ⅴ| 欧美刺激午夜性久久久久久久| 三级影片在线观看欧美日韩一区二区| 91成人在线观看喷潮| 一区二区三区四区精品在线视频 | 亚洲一级片在线观看| 91丨九色丨尤物| 成人动漫视频在线| 欧美精彩视频一区二区三区| 精品亚洲成av人在线观看| 日韩精品一区二| 精品一区二区免费在线观看| 欧美一区二区精品| 久久国产精品99久久人人澡| 欧美变态tickle挠乳网站| 久久国产尿小便嘘嘘尿| 精品国产电影一区二区| 国产老女人精品毛片久久| 国产日韩精品一区二区三区在线| 国产成人综合在线| 国产精品国产三级国产a| aaa欧美色吧激情视频| 樱桃视频在线观看一区| 欧美视频在线观看一区二区| 婷婷丁香激情综合| 精品国产亚洲在线| 大陆成人av片| 亚洲激情自拍视频| 678五月天丁香亚洲综合网| 另类中文字幕网| 欧美—级在线免费片| 91亚洲国产成人精品一区二区三 | 91色在线porny| 青青草原综合久久大伊人精品优势| 日韩欧美亚洲国产精品字幕久久久| 欧美电影一区二区三区| 久久久91精品国产一区二区三区| 风间由美一区二区三区在线观看 | 综合久久久久久| 欧美中文字幕一区二区三区亚洲| 日韩制服丝袜先锋影音| 欧美电影免费提供在线观看| 国产不卡在线视频| 一区二区三区中文在线观看| 91麻豆精品国产91久久久久久久久 | 777久久久精品| 国产乱子轮精品视频| 国产精品萝li| 91麻豆精品国产91久久久久久| 国产精品亚洲一区二区三区在线| 中文字幕亚洲欧美在线不卡| 欧美日韩亚洲国产综合| 看片网站欧美日韩| 国产女人18毛片水真多成人如厕| 日韩va欧美va亚洲va久久| 日韩一二三区不卡| 成人黄色电影在线| 日韩专区一卡二卡| 欧美国产视频在线| 宅男在线国产精品| proumb性欧美在线观看| 亚洲国产一区二区视频| 国产婷婷色一区二区三区| 欧洲亚洲精品在线| 国产麻豆91精品| 亚洲成在人线在线播放| 久久影院视频免费| 欧美精品一二三四| 不卡av在线免费观看| 麻豆精品视频在线| 亚洲精选一二三| 国产婷婷一区二区| 日韩一区二区三区电影在线观看 | 欧美久久久久中文字幕| 波多野结衣中文字幕一区二区三区 | 欧美性做爰猛烈叫床潮| 色天使久久综合网天天| 国产伦精品一区二区三区视频青涩| 午夜精品久久久久久久99樱桃|