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

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

?? 詞法分析器.cpp

?? Pascal源程序的詞法分析器 Pascal有35個關鍵字
?? CPP
字號:
#include "iostream.h"
#include "fstream.h"
#include "string.h"
#include "stdlib.h"
#include "stdio.h"
#define AND		   1
#define ARRAY      2
#define BEGIN      3
#define CASE       4
#define CONST      5
#define DIV        6
#define DO         7
#define DOWNTO     8
#define ELSE       9
#define END        10
#define FILE       11
#define FOR        12
#define FUNCTION   13
#define GOTO       14
#define IF         15
#define IN         16
#define LABEL      17
#define MOD        18
#define NIL        19
#define NOT        20
#define OF         21
#define OR         22
#define PACKED     23
#define PROCEDURE  24
#define PROGRAM    25
#define RECODE     26
#define REPEAT     27
#define SET        28
#define THEN       29
#define TO         30
#define TYPE       31
#define UNTIL      32
#define VAR        33
#define WHILE      34
#define WITH       35	//35個關鍵字
#define IDENTIFIER 36	//標識符
#define UNSIGNINT  63	//整型
#define UNSIGNREAL 64	//實型
#define CHAR       65	//字符型
#define STRING     66	//字符串型
#define TAB	9

void Analysis(fstream &file)
{	
	char ch;		//搜索字符
    char word[121];	//單詞數組
	int i;			//單詞下標
	int length;		//單詞長度
	int type;		//單詞類型
    bool tag,flag;		//單詞分析循環控制變量,過程控制變量
    char KEYWORD[10],keyword[10];	//準關鍵字和關鍵字
    int INT;				//無符號整型數的值
	float REAL,weight;		//無符號實型數的值,權
	int exp;				//指數
	
	
	fstream finalfile,keyword_file;
    finalfile.open("final.txt",ios::out|ios::app);
	if(finalfile.fail())
	{
		cout<<"輸出文件打開失敗!"<<endl;
		exit(0);
	}
	
	tag=true;		//沒有語法錯誤
	length=0;		//初始化單詞長度
	
	while(!file.eof() && tag)
	{						
		file.get(ch);
		if(!file.eof())
		{
			if((ch>='A' && ch<='Z') ||(ch>='a' && ch<='z') )	//標識符或關鍵字識別開始
			{
				i=0;
				while( (ch>='A' && ch<='Z') || (ch>='a'&& ch<='z') || (ch>='0' && ch<='9') )
				{
					if(i<120)	//截斷
					{
						word[i]=ch;
						file.get(ch);
						i++;
					}
				}
				file.seekg(-1L,ios::cur);	//文件指針回退一步 
				word[i]='\0';
				length=i;
				flag=true;				//flag為true表示word是準關鍵字,false表示word為標識符	
				for(i=0;i<length;i++)	//把標識符轉換成大寫字符串,以便判斷是不是關鍵字
				{
					if(word[i]>='a' && word[i]<='z')
						KEYWORD[i]=word[i]-32;
					else if(word[i]>='A' && word[i]<='Z' )
						KEYWORD[i]=word[i];
					else
					{
						flag=false;
						type=IDENTIFIER;	//word為標識符
						break;
					}
				}                       //大寫轉換完畢
				if(flag)
				{
					KEYWORD[i]='\0';	//字符串結束符
					keyword_file.open("keyword.txt",ios::in);	//打開關鍵字表
					if(keyword_file.fail())
					{
						cout<<"找不到keyword_file!"<<endl;
						exit(0);
					}					
					keyword_file>>keyword;
					type=1;						
					while(!keyword_file.eof())	//匹配關鍵字表
					{
						if(strcmp(keyword,KEYWORD)==0)
							break;
						else
						{
							keyword_file>>keyword;
							type++;
						}
					}
					keyword_file.close();
				}	//1-35為關鍵字,36為標識符,所以若關鍵字表找不到,type為36,剛好是標識符
				finalfile<<type<<" "<<word<<endl;	//存放到文件finalfile中去
				break;								//退出詞法分析循環
			}										//標識符或關鍵字識別完畢
			else if(ch>='0' && ch<='9')				//無符號數識別開始
			{
				i=0;
				while(ch>='0' && ch<='9')
				{
					word[i]=ch;
					file.get(ch);
					i++;
				}
				if(ch!='.' && ch!='E')
				{
					word[i]='\0';
					length=i;
					file.seekg(-1L,ios::cur);	//文件指針回退一步
					INT=0;
					for(i=0;i<length;i++)
						INT=INT*10+word[i]-'0';
					finalfile<<UNSIGNINT<<" "<<INT<<endl;
					break;
				}		//無符號整型數識別
				else	//無符號實型數識別開始
				{
					if(ch=='.')					//開始處理小數點
					{
						word[i]=ch;				//保存小數點
						file.get(ch);	//讀取下一個字符
						i++;					//下標前移
						if(ch>='0' && ch<='9')	//讀取小數點后的數開始
						{
							while(ch>='0' && ch<='9')
							{
								word[i]=ch;
								i++;
								file.get(ch);
							}				//小數部分讀取
							if(ch!='E')		//無符號實數xxx.xxx轉換開始
							{
								word[i]='\0';
								length=i;
								file.seekg(-1L,ios::cur);	
								REAL=0.0;
								for(i=0;word[i]!='.';i++)	//整數部分
								{
									REAL=REAL*10+word[i]-'0';
								}
								weight=10.0;
								for(i++;i<length;i++)			//小數部分
								{
									REAL=REAL+(word[i]-'0')/weight;
									weight*=10;
								}
								finalfile<<UNSIGNREAL<<" "<<REAL<<endl;
							}		//無符號實數xxx.xxx識別
							else	//繼續識別無符號實數XXX.XXXEXXX
							{
								word[i]=ch;				//保存E
								i++;					//下標前移
								file.get(ch);	//讀取下一個字符
								if(ch=='+' || ch=='-')	//讀進一個正號或負號,如果沒有則略過
								{
									word[i]=ch;
									i++;
									file.get(ch);
								}
								if(ch>='0' && ch<='9')
								{
									while(ch>='0' && ch<='9')	//讀取階碼
									{
										word[i]=ch;
										i++;
										file.get(ch);
									}
									word[i]='\0';
									length=i;
									file.seekg(-1L,ios::cur);
									REAL=0.0;
									for(i=0;word[i]!='.';i++)		//整數部分
									{
										REAL=REAL*10+word[i]-'0';
									}
									weight=0.1f;
									for(i++;word[i]!='E';i++)		//小數部分
									{
										REAL=REAL+(word[i]-'0')*weight;
										weight/=10.0;
									}								//E前的尾數
									i++;
									weight=10.0;					//如果沒有正負號,默認階碼為正
									if(word[i]=='+')				//判斷階碼正負號
									{
										weight=10.0;
										i++;
									}
									else if(word[i]=='-')
									{
										weight=0.1f;
										i++;
									}
									exp=0;				//階碼
									for(;i<length;i++)
									{
										exp=exp*10+word[i]-'0';
									}
									while(exp>0)
									{
										REAL=REAL*weight;
										exp--;
									}
									finalfile<<UNSIGNREAL<<" "<<REAL<<endl;
								}		//無符號實數XXX.XXXEXXX識別
								else
								{
									tag=false;
									break;
								}
							}			//無符號實數XXX.XXXEXXX識別
						}	//讀取小數點后的數結束
						else
						{
							tag=false;
							break;
						}
					}	//小數點處理結束
					else if(ch=='E')			//開始處理E
					{
						word[i]=ch;				//讀進一個E
						i++;					//下標前移
						file.get(ch);	//讀取下一個字符
						if(ch=='+' || ch=='-')	//讀進一個正號或負號,如果沒有就跳過
						{
							word[i]=ch;
							i++;
							file.get(ch);
						}
						if(ch>='0' && ch<='9')
						{
							while(ch>='0' && ch<='9')		//讀取階碼
							{
								word[i]=ch;
								i++;
								file.get(ch);
							}
							word[i]='\0';
							length=i;
							file.seekg(-1L,ios::cur);
							REAL=0.0;
							for(i=0;word[i]!='E';i++)		//整數部分
							{
								REAL=REAL*10+word[i]-'0';
							}								//E前的尾數
							i++;							//略過E
							weight=10.0;					//如果沒有正負號,默認階碼為正
							if(word[i]=='+')				//判斷階碼正負號
							{
								weight=10.0;
								i++;
							}
							else if(word[i]=='-')
							{
								weight=0.1f;
								i++;
							}
							exp=0;				
							for(;i<length;i++)	//階碼
							{
								exp=exp*10+word[i]-'0';
							}
							while(exp>0)
							{
								REAL=REAL*weight;
								exp--;
							}
							finalfile<<UNSIGNREAL<<" "<<REAL<<endl;	//保存到文件finalfile
						}
						else
						{
							tag=false;
							break;
						}
					}	//E處理完畢
				}		//無符號實型數處理完畢
				break;	//退出詞法分析循環
			}			//無符號數識別完畢
			else if(ch=='\'')	//字符或字符串常數識別開始
			{
				i=0;
				file.get(ch);		
				flag=true;		//flag為true表示字符或字符串處理還沒結束,為false表示處理結束
				while(flag)
				{
					if(ch=='\'')
					{
						file.get(ch);
						if(ch=='\'')	//讀到字符串中的“''”,即“'”號
						{
							word[i]=ch;
							i++;
							file.get(ch);
						}
						else			//字符或字符串識別完畢
						{
							file.seekg(-1L,ios::cur);
							flag=false;
						}
					}
					else
					{
						if(i<120)		//截斷
						{
							word[i]=ch;
							i++;
							file.get(ch);
						}
					}
					if(file.eof())
					{
						tag=false;
						break;
					}
				}
				word[i]='\0';
				length=i;
				if(tag==false)
					break;
				if(length==0)
					tag=false;
				else if(length==1)
					finalfile<<CHAR<<" "<<word<<endl;
				else if(length>1)
					finalfile<<STRING<<" "<<word<<endl;
				break;
			}	//字符或字符串常數識別完畢
			else if((ch>=40 && ch<=45) || ch=='/' || ch==';' || ch=='=')				
			{	//ASCII字符從40-47, ‘/’ , ‘;’ , ‘=’ 都是可唯一確定的界符,且編號等于它們的ASCII碼
				finalfile<<int(ch)<<" "<<ch<<endl; 
				break;
			}
			else 
			{
				flag=false;		//flag 為true 表示已尋找到界符,為false表示沒有尋找到界符
				switch(ch)
				{
				case'[':
					finalfile<<54<<" "<<ch<<endl;
					flag=true;
					break;
				case']':
					finalfile<<55<<" "<<ch<<endl;
					flag=true;
					break;
				case'^':
					finalfile<<53<<" "<<ch<<endl;
					flag=true;
					break;
				case'<':
					file.get(ch);
					if(ch=='=')					
						finalfile<<48<<" "<<'<'<<ch<<endl;					
					else if(ch=='>')				
						finalfile<<49<<" "<<'<'<<ch<<endl;						
					else
					{
						file.seekg(-1L,ios::cur);
						finalfile<<int('<')<<" "<<'<'<<endl;									
					}
					flag=true;
					break;
				case'>':
					file.get(ch);
					if(ch=='=')				
						finalfile<<50<<" "<<'>'<<ch<<endl;					
					else
					{
						file.seekg(-1L,ios::cur);
						finalfile<<int('>')<<" "<<'>'<<endl;						
					}
					flag=true;
					break;
				case':':
					file.get(ch);
					if(ch=='=')				
						finalfile<<51<<" "<<':'<<ch<<endl;					
					else
					{
						file.seekg(-1L,ios::cur);
						finalfile<<int(':')<<" "<<':'<<endl;						
					}
					flag=true;
					break;
				case'.':
					file.get(ch);
					if(ch=='.')
						finalfile<<52<<" "<<'.'<<ch<<endl;
					else
					{
						file.seekg(-1L,ios::cur);
						finalfile<<int('.')<<" "<<'.'<<endl;
					}
					flag=true;
					break;
				case '\n':
				case TAB:
				case ' ':
					while(ch==' '|| ch==TAB || ch=='\n')	//略過空格					
						file.get(ch);
					if(file.eof())
					{
						tag=false;
						break;
					}					
					file.seekg(-1L,ios::cur);	//文件指針后移一步
					break;
				case '{':			//清除注釋	
					while(ch!='}')	
					{
						file.get(ch);
						if(file.eof())
						{
							tag=false;
							break;
						}
					}
					break;
				}
				if(flag)
					break;
			}			
		}
	}
	finalfile.close();
}




void main()
{
    fstream file;
    file.open("source.txt",ios::in|ios::nocreate);
    if(file.fail())
	{
		cout<<"文件打開失敗,請確認文件時候存在!"<<endl;
	       exit(0);
	}
	while(!file.eof())
		Analysis(file);
    cout<<"結果已保存到了文件final.txt中"<<endl;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产麻豆成人传媒免费观看| 午夜精品久久久久久久久| 精品一区二区三区视频| 日韩欧美一区二区久久婷婷| 久久国产夜色精品鲁鲁99| 久久久影视传媒| 99久久99久久综合| 亚洲一区二区三区免费视频| 欧美男同性恋视频网站| 日本亚洲一区二区| 久久先锋影音av鲁色资源网| 成人福利在线看| 亚洲自拍偷拍欧美| 日韩一区二区三区免费观看| 国产精品亚洲综合一区在线观看| 国产精品色噜噜| 欧美视频一区二区三区| 久久99精品久久久久久动态图| 国产人妖乱国产精品人妖| 色婷婷综合久色| 蓝色福利精品导航| 国产精品美女久久久久久2018| 欧美日韩综合一区| 国内久久精品视频| 亚洲欧美另类小说| 欧美一区二区女人| 波多野结衣中文字幕一区| 亚洲va国产天堂va久久en| 久久久五月婷婷| 欧美日韩在线三级| 成人午夜视频在线| 亚洲动漫第一页| 国产农村妇女毛片精品久久麻豆| 在线区一区二视频| 九色|91porny| 一卡二卡三卡日韩欧美| 久久伊人中文字幕| 欧美日韩成人综合天天影院 | 亚洲香蕉伊在人在线观| 日韩精品一区二区三区蜜臀| 91香蕉视频mp4| 极品少妇xxxx精品少妇| 亚洲亚洲精品在线观看| 国产精品视频一二| 精品久久久久久无| 在线观看日产精品| eeuss国产一区二区三区| 日本sm残虐另类| 亚洲国产综合在线| 一区在线观看视频| 国产亚洲精久久久久久| 欧美一级一级性生活免费录像| 成年人国产精品| 国产精品一二三| 九九视频精品免费| 日韩精品一区第一页| 亚洲精品国产a久久久久久| 欧美精品一区二区三区蜜桃| 91精品在线麻豆| 欧美主播一区二区三区| av不卡免费电影| 成人av电影在线网| 成人自拍视频在线| 不卡电影一区二区三区| 久久se精品一区精品二区| 日韩精品欧美精品| 亚洲bt欧美bt精品777| 一区二区三区四区不卡在线| 亚洲免费av高清| 亚洲美女精品一区| 亚洲欧美另类久久久精品| 国产精品免费久久| 国产精品免费观看视频| 欧美激情综合网| 日本一区二区成人| 国产女同性恋一区二区| 中文av一区二区| 国产精品女人毛片| 国产精品拍天天在线| 中文字幕不卡一区| 国产精品欧美综合在线| 国产精品乱码妇女bbbb| 国产精品国产三级国产aⅴ中文| 中文字幕一区二区三区色视频| 日本一区二区高清| 国产精品久久久久7777按摩| 中文字幕制服丝袜一区二区三区 | 久久久久久97三级| 国产亚洲一二三区| 国产欧美精品国产国产专区| 中文av一区特黄| 一区二区视频在线| 亚洲第一久久影院| 免费看欧美美女黄的网站| 激情小说亚洲一区| 成人精品一区二区三区四区| 日本韩国欧美国产| 欧美二区三区的天堂| 日韩一区二区三区在线观看| 久久久久久久久久看片| 国产精品国产自产拍在线| 亚洲色图在线视频| 日韩制服丝袜先锋影音| 国产一区二区视频在线| 不卡高清视频专区| 欧美日韩国产在线观看| 精品日韩99亚洲| 国产精品青草久久| 香蕉久久夜色精品国产使用方法 | 国产老肥熟一区二区三区| 高潮精品一区videoshd| 色婷婷精品久久二区二区蜜臀av| 欧美老女人在线| 久久久五月婷婷| 亚洲国产人成综合网站| 国产综合色产在线精品| 在线观看国产日韩| 精品久久一二三区| 一区二区三区四区激情 | 不卡av在线免费观看| 欧美日韩免费观看一区三区| 337p日本欧洲亚洲大胆精品| 国产精品麻豆99久久久久久| 亚洲大尺度视频在线观看| 激情偷乱视频一区二区三区| av动漫一区二区| 欧美大片日本大片免费观看| 亚洲欧美综合网| 久久激五月天综合精品| 色狠狠综合天天综合综合| xnxx国产精品| 亚洲v精品v日韩v欧美v专区| 成人综合激情网| 精品女同一区二区| 亚洲一级二级在线| 成人午夜私人影院| 欧美一级二级在线观看| 亚洲人123区| 国产精品一区二区黑丝| 欧美裸体一区二区三区| 亚洲美女在线一区| 高清在线观看日韩| 亚洲精品在线免费播放| 三级成人在线视频| 日本丶国产丶欧美色综合| 久久久一区二区三区捆绑**| 人人精品人人爱| 欧洲日韩一区二区三区| 日韩伦理电影网| 成人午夜在线视频| 久久精品一区二区| 久久精品免费观看| 欧美狂野另类xxxxoooo| 亚洲欧美另类在线| 99精品黄色片免费大全| 国产精品色一区二区三区| 国产乱色国产精品免费视频| 欧美精品v国产精品v日韩精品 | 亚洲国产美女搞黄色| 91麻豆国产自产在线观看| 欧美韩国日本不卡| 国产成人av一区二区三区在线 | 欧美日韩成人一区二区| 中文字幕一区在线| 粉嫩13p一区二区三区| 久久久不卡网国产精品一区| 黄页网站大全一区二区| 在线不卡的av| 天天综合天天综合色| 欧美男生操女生| 日韩专区在线视频| 日韩三级在线免费观看| 日av在线不卡| 欧美电影免费观看完整版| 美女视频第一区二区三区免费观看网站| 欧美精品aⅴ在线视频| 午夜电影一区二区三区| 3d动漫精品啪啪1区2区免费| 免费观看一级欧美片| 精品久久国产老人久久综合| 国内精品伊人久久久久av影院 | 99国产精品久久久久| 最新不卡av在线| 欧美影院一区二区| 午夜影院在线观看欧美| 欧美成人一区二区三区在线观看 | 综合久久一区二区三区| 91福利区一区二区三区| 亚洲电影中文字幕在线观看| 日韩欧美一区二区三区在线| 国产一区视频网站| 国产精品高潮久久久久无| 色天使色偷偷av一区二区 | 亚洲国产aⅴ成人精品无吗| 欧美日韩亚洲综合在线| 蜜桃视频在线观看一区二区| 中文字幕+乱码+中文字幕一区| 99视频在线观看一区三区| 午夜精品久久久久久久蜜桃app| 日韩午夜中文字幕|