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

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

?? 詞法分析器(內存和文件).cpp

?? 簡單的詞法分析器 利用vc編程 功能 可以打開任意位置和名稱的原文件進行詞法分析
?? CPP
字號:
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<fstream>
#include<string>
#include<cmath>
using namespace std;
struct token//token結構體
{
	int code;
	int num;
	token *next;
};
token *token_head,*token_tail;//token隊列
struct number//number結構體
{
	int num;
	int value;
	number *next;
};
number *number_head,*number_tail;//number隊列
struct str//string結構體
{
	int num;
	string  word;
	str *next;
};
str *string_head,*string_tail;//string隊列
void scan();//按字符讀取源文件
int judge(char ch);//判斷輸入字符的類型
void out1(char ch);//寫入token.txt
void out2(char ch,string word);//寫入number.txt
void out3(char ch,string word);//寫入string.txt
void input1(token *temp);//插入結點到隊列token
void input2(number *temp);//插入結點到隊列number
void input3(str *temp);//插入結點到隊列string
void output();//輸出三個隊列的內容
void outfile();//輸出三個隊列的內容到相應文件中
FILE *fp;//文件
int wordcount;//標志符計數
int numcount;//整型常數計數
int err;//標志詞法分析結果正確或錯誤
int nl;//讀取行數
void main()
{
	token_head=new token;
	token_head->next=NULL;
	token_tail=new token;
	token_tail->next=NULL;
	number_head=new number;
	number_head->next=NULL;
	number_tail=new number;
	number_tail->next=NULL;
	string_head=new str;
	string_head->next=NULL;
	string_tail=new str;
	string_tail->next=NULL;//初始化三個隊列的首尾指針
	wordcount=0;//初始化字符計數器
	numcount=0;//初始化常數計數器
	err=0;//初始化詞法分析錯誤標志
	nl=1;//初始化讀取行數
	scan();
	if(err==0)
	{
		char m;
		cout<<"詞法分析正確完成!"<<endl<<endl<<"下邊將輸出結果,如果將結果保存到文件中請輸入 y ,否則請輸入其它鍵:";
		cin>>m;
		output();
		if(m=='y')
		{
			cout<<"結果同時保存在token.txt、number.txt和sting.txt三個文件中,請打開查看"<<endl;
			outfile();
		}
	}
	cout<<endl;
	system("pause");
}
void scan()
{
	char ch;
	string word;
	char document[50];
	int flag=0;
	cout<<"請輸入源文件路徑及名稱:";
	cin>>document;
	cout<<endl;
	if((fp=fopen(document,"rt"))==NULL)
	{
		err=1;
		cout<<"無法找到該文件!"<<endl;
		return;
	}
	while(!feof(fp))
	{
		word="";
		ch=fgetc(fp);
		flag=judge(ch);
		if(flag==1)
			out1(ch);
		else if(flag==2)
			out2(ch,word);
		else if(flag==3)
			out3(ch,word);
		else if(flag==4 || flag==5 ||flag==6)
			continue;
		else
		{
			cout<<nl<<"行  "<<"錯誤:非法字符!  "<<ch<<endl;
			err=1;
		}
	}
	fclose(fp);
}
int judge(char ch)
{
	int flag=0;
	if(ch=='=' || ch=='+' || ch=='*' || ch=='>' || ch==':' || ch==';' || ch=='{' || ch=='}' || ch=='(' || ch==')')
		flag=1;//界符
	else if('0'<=ch && ch<='9')
		flag=2;//數字
	else if(('a'<=ch && ch<='z') || ('A'<=ch && ch<='Z'))
		flag=3;//字母
	else if(ch==' ')
		flag=4;//空格
	else if(feof(fp))
		flag=5;//結束
	else if(ch=='\n')
	{
		flag=6;//換行
		nl++;
	}
	else
		flag=0;//非法字符
	return(flag);
}
void out1(char ch)
{
	int id;
	switch(ch)
	{
	case '=' : id=1;break;
	case '+' : id=2;break;
	case '*' : id=3;break;
	case '>' : id=4;break;
	case ':' : id=5;break;
	case ';' : id=6;break;
	case '{' : id=7;break;
	case '}' : id=8;break;
	case '(' : id=9;break;
	case ')' : id=10;break;//界符編碼
	default : id=0;
	}
	token *temp;
	temp=new token;
	temp->code=id;
	temp->num=-1;
	temp->next=NULL;
	input1(temp);
	return;
}
void out2(char ch,string word)
{
	token *temp;
	temp=new token;
	temp->code=-1;
	temp->num=-1;
	temp->next=NULL;
	number *temp1;
	temp1=new number;
	temp1->num=-1;
	temp1->value=-1;
	temp1->next=NULL;
	int flag=0;
	word=word+ch;
	ch=fgetc(fp);
	flag=judge(ch);
	if(flag==1)
	{
		numcount++;
		temp->code=26;
		temp->num=numcount;
		input1(temp);
		temp1->num=numcount;
		int i,num_value=0,num_length;//字符串轉化為數字
		char *num_head;
		num_head=&word[0];
		num_length=strlen(num_head);
		for(i=num_length-1;i>=0;i--)
			num_value=num_value+(int(word[i])-48)*pow(10,(num_length-i-1));
		temp1->value=num_value;//把數字的值賦給結點
		input2(temp1);
		out1(ch);
	}
	else if(flag==2)
		out2(ch,word);//形成字符串
	else if(flag==3)
	{
		err=1;
		cout<<nl<<"行  "<<"錯誤:數字后面跟字母!"<<endl;
		return;
	}
	else if(flag==4 || flag==5 || flag==6)
	{
		numcount++;
		temp->code=26;
		temp->num=numcount;
		input1(temp);
		temp1->num=numcount;
		int i,num_value=0,num_length;//字符串轉化為數字
		char *num_head;
		num_head=&word[0];
		num_length=strlen(num_head);
		for(i=num_length-1;i>=0;i--)
			num_value=num_value+(int(word[i])-48)*pow(10,(num_length-i-1));
		temp1->value=num_value;//把數字的值賦給結點
		input2(temp1);
		return;
	}
	else
	{
		err=1;
		cout<<nl<<"行  "<<"錯誤:非法字符!  "<<ch<<endl;
		return;
	}
}
void out3(char ch,string word)
{
	token *temp;
	temp=new token;
	temp->code=-1;
	temp->num=-1;
	temp->next=NULL;
	str *temp1;
	temp1=new str;
	temp1->num=-1;
	temp1->word="";
	temp1->next=NULL;
	int flag=0;
	word=word+ch;
	ch=fgetc(fp);
	flag=judge(ch);
	if(flag==1 || flag==4 || flag==5 || flag==6)
	{
		if(word=="and" || word=="if" || word=="then" || word=="else" || word=="while" || word=="do" || word=="int")
		{
			if(word=="and")
				temp->code=31;
			else if(word=="if")
				temp->code=32;
			else if(word=="then")
				temp->code=33;
			else if(word=="else")
				temp->code=34;
			else if(word=="while")
				temp->code=35;
			else if(word=="do")
				temp->code=36;
			else if(word=="int")
				temp->code=37;//關鍵字編碼
			input1(temp);
			if(flag==1)
				out1(ch);
			else if(flag==4 || flag==5 || flag==6)
				return;
		}
		else if(flag==1)
		{
			wordcount++;
			temp->code=25;
			temp->num=wordcount;
			input1(temp);
			temp1->num=wordcount;
			temp1->word=word;
			input3(temp1);
			out1(ch);
		}
		else if(flag==4 || flag==5 || flag==6)
		{
			wordcount++;
			temp->code=25;
			temp->num=wordcount;
			input1(temp);
			temp1->num=wordcount;
			temp1->word=word;
			input3(temp1);
		}
		return;
	}
	else if(flag==2 || flag==3)
		out3(ch,word);//形成字符串
	else
	{
		err=1;
		cout<<nl<<"行  "<<"錯誤:非法字符!  "<<ch<<endl;
		return;
	}
}
void input1(token *temp)
{
	if(token_head->next == NULL)
	{
		token_head->next=temp;
		token_tail->next=temp;
	}
	else
	{
		token_tail->next->next=temp;
		token_tail->next=temp;
	}
}
void input2(number *temp)
{
	if(number_head->next == NULL)
	{
		number_head->next=temp;
		number_tail->next=temp;
	}
	else
	{
		number_tail->next->next=temp;
		number_tail->next=temp;
	}
}
void input3(str *temp)
{
	if(string_head->next == NULL)
	{
		string_head->next=temp;
		string_tail->next=temp;
	}
	else
	{
		string_tail->next->next=temp;
		string_tail->next=temp;
	}
}
void output()
{
	cout<<"token表內容如下:"<<endl;
	token *temp1;
	temp1=new token;
	temp1=token_head->next;
	while(temp1!=NULL)
	{
		cout<<temp1->code;
		if(temp1->num == -1)
		{
			cout<<endl;
		}
		else
		{
			cout<<"   "<<temp1->num<<endl;
		}
		temp1=temp1->next;
	}
	cout<<"常數表內容如下:"<<endl;
	number *temp2;
	temp2=new number;
	temp2=number_head->next;
	while(temp2!=NULL)
	{
		cout<<temp2->num<<"   "<<temp2->value<<endl;
		temp2=temp2->next;
	}
	cout<<"符號表內容如下:"<<endl;
	str *temp3;
	temp3=new str;
	temp3=string_head->next;
	while(temp3!=NULL)
	{
		cout<<temp3->num<<"   "<<temp3->word<<endl;
		temp3=temp3->next;
	}
}
void outfile()
{
	ofstream fout1("token.txt");//寫文件
	ofstream fout2("number.txt");
	ofstream fout3("string.txt");
	token *temp1;
	temp1=new token;
	temp1=token_head->next;
	while(temp1!=NULL)
	{
		fout1<<temp1->code;
		if(temp1->num == -1)
			fout1<<endl;
		else
			fout1<<"   "<<temp1->num<<endl;
		temp1=temp1->next;
	}
	number *temp2;
	temp2=new number;
	temp2=number_head->next;
	while(temp2!=NULL)
	{
		fout2<<temp2->num<<"   "<<temp2->value<<endl;
		temp2=temp2->next;
	}
	str *temp3;
	temp3=new str;
	temp3=string_head->next;
	while(temp3!=NULL)
	{
		fout3<<temp3->num<<"   "<<temp3->word<<endl;
		temp3=temp3->next;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区在线看| 国产乱子伦一区二区三区国色天香| 国产精品性做久久久久久| 26uuu欧美| 狠狠v欧美v日韩v亚洲ⅴ| 精品国产乱码久久久久久老虎| 国产精品一区二区在线看| 国产精品美女一区二区三区| 91色综合久久久久婷婷| 亚洲va欧美va人人爽| 日韩欧美一二三四区| 成人小视频免费观看| 亚洲曰韩产成在线| 4438x成人网最大色成网站| 国产一区二区三区久久久| 中文字幕在线一区二区三区| 在线亚洲人成电影网站色www| 亚洲大尺度视频在线观看| 精品国产髙清在线看国产毛片| 国产成人免费9x9x人网站视频| 亚洲你懂的在线视频| 69久久夜色精品国产69蝌蚪网| 国产一区二区三区免费| 亚洲一区二区精品久久av| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 欧美tk丨vk视频| 粉嫩13p一区二区三区| 一区二区三区免费| 精品国产伦一区二区三区免费 | 欧洲av一区二区嗯嗯嗯啊| 六月丁香婷婷色狠狠久久| 国产精品二三区| 6080午夜不卡| 波多野结衣在线一区| 视频一区视频二区在线观看| 国产精品色眯眯| 91精品婷婷国产综合久久竹菊| 不卡一区二区在线| 另类小说视频一区二区| 一区二区三区电影在线播| 久久精品一区八戒影视| 欧美精品国产精品| 色综合久久综合网欧美综合网| 国产制服丝袜一区| 偷拍与自拍一区| 亚洲日本乱码在线观看| 久久影院电视剧免费观看| 欧美日本一区二区三区四区| 99这里只有久久精品视频| 国产综合色精品一区二区三区| 亚洲成人精品一区| 日韩一区在线看| 国产亚洲人成网站| 精品乱人伦小说| 欧美一卡二卡三卡| 欧美日韩国产a| 在线观看成人小视频| 99re视频精品| 粉嫩嫩av羞羞动漫久久久 | 久久精品欧美日韩精品| 欧美伦理电影网| 欧美午夜免费电影| 色婷婷激情一区二区三区| eeuss国产一区二区三区| 国产91精品免费| 高清shemale亚洲人妖| 国产一区二区三区国产| 久久99久国产精品黄毛片色诱| 石原莉奈在线亚洲三区| 丝袜a∨在线一区二区三区不卡| 一区二区三区国产| 亚洲在线成人精品| 亚洲成人精品在线观看| 亚洲国产aⅴ成人精品无吗| 亚洲国产精品一区二区久久恐怖片| 亚洲蜜臀av乱码久久精品 | 欧美日韩国产bt| 91麻豆精品国产91久久久久久久久 | 国产人成一区二区三区影院| 久久先锋影音av鲁色资源网| 久久久久亚洲蜜桃| 国产精品视频一二| 日韩一区在线免费观看| 一区二区免费看| 亚洲福利电影网| 欧美aⅴ一区二区三区视频| 日韩不卡手机在线v区| 精品亚洲成a人| 国产一区二区不卡在线| 成人免费视频一区二区| 99综合影院在线| 欧美日韩电影在线播放| 日韩欧美激情一区| 欧美激情综合五月色丁香| 蜜桃传媒麻豆第一区在线观看| 久久99在线观看| 国产成人在线看| 色域天天综合网| 欧美精品777| 欧美精品一区二区久久婷婷 | av电影在线观看一区| 在线视频一区二区免费| 欧美一区二区免费观在线| 久久精品亚洲精品国产欧美kt∨ | 国产91丝袜在线播放0| 一本高清dvd不卡在线观看| 欧美日韩大陆在线| 国产日本欧美一区二区| 亚洲一级二级在线| 国产精品资源网| 欧美色视频一区| 精品欧美久久久| 亚洲精品高清在线观看| 奇米四色…亚洲| 99久久综合色| 欧美一级理论片| 日韩美女久久久| 激情五月播播久久久精品| 色94色欧美sute亚洲线路一久| 精品乱人伦小说| 亚洲国产精品一区二区尤物区| 国产成人无遮挡在线视频| 欧美性xxxxx极品少妇| 首页国产丝袜综合| av动漫一区二区| 精品捆绑美女sm三区| 亚洲午夜电影网| 国产91精品久久久久久久网曝门| 在线播放视频一区| 一本久道中文字幕精品亚洲嫩| 在线日韩国产精品| 欧美精品一区二区久久久| 亚洲午夜激情网页| 成人午夜精品一区二区三区| 日韩欧美一区中文| 天天综合色天天综合| 99re这里只有精品首页| 精品国产91久久久久久久妲己| 亚洲高清视频在线| 欧美日韩一级二级| 亚洲第一成人在线| 欧美精品黑人性xxxx| 亚洲国产精品天堂| 91福利在线观看| 亚洲午夜激情av| 欧美性大战xxxxx久久久| 亚洲品质自拍视频网站| 97精品超碰一区二区三区| 亚洲欧美日韩国产手机在线| 在线观看亚洲成人| 国产午夜精品一区二区三区视频| 不卡av在线网| 一区二区三区国产精品| 久久综合色一综合色88| 国产在线播精品第三| 一区二区三区在线观看国产| 日韩欧美一级在线播放| 国产精品灌醉下药二区| 成人看片黄a免费看在线| 国产蜜臀97一区二区三区| 精品国产污污免费网站入口 | 欧美午夜精品一区| 国产精品伦一区| 成人一区在线观看| 国产亚洲自拍一区| 国产成人h网站| 欧美经典一区二区| 国产91精品免费| 中文字幕综合网| 在线免费精品视频| 亚洲欧洲日产国码二区| 国产99久久久久| aaa亚洲精品| 7799精品视频| 欧美日韩在线播放一区| 亚洲国产一区视频| 欧美一级日韩免费不卡| 久久精品国产一区二区| 久久久99久久| 成人激情午夜影院| 亚洲裸体在线观看| 在线免费视频一区二区| 日韩国产成人精品| 欧美不卡一区二区三区四区| 国精品**一区二区三区在线蜜桃| 国产网站一区二区| 99精品在线免费| 三级久久三级久久久| 日韩三级av在线播放| 丰满少妇久久久久久久| 一区二区三区欧美日韩| 在线不卡中文字幕播放| 极品瑜伽女神91| 中文字幕二三区不卡| 欧美日韩国产一级片| 精品影视av免费| 国产精品国产a| 这里只有精品视频在线观看| 国产一区二区三区香蕉| 亚洲亚洲人成综合网络|