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

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

?? 語法分析器.cpp

?? C語言語法分析器
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#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隊列
struct ivan//表達式結構體
{
	char left;
	string right;
	int len;
};
ivan css[20];//20個表達式
struct pank//action表結構體
{
	char sr;
	int state;
};
pank action[46][18];//action表
int go_to[46][11];//go_to表
struct ike//分析棧結構體,雙鏈
{
	ike *pre;
	int num;
	int word;
	ike *next;
};
ike *stack_head,*stack_tail;//分析棧首尾指針

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();//輸出三個隊列的內容到相應文件中
void yufa_initialize();//初始化語法分析數據結構
int yufa_main(int a);//語法分析主體部分
int ID1(int a);//給輸入字符編號,轉化成action表列編號
string ID10(int i);//給輸入字符反編號
int ID2(char ch);//給非終結狀態編號,轉化成go_to表列編號
int ID20(char ch);//給非終結狀態編號
char ID21(int j);//給非終結狀態反編號
void add(ike *temp);//給ike分析棧鏈表增加一個結點
void del();//給ike分析棧鏈表刪除一個結點

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();
		}
	}
	yufa_initialize();//初始化語法分析數據結構
	token *temp;
	temp=new token;
	temp=token_head->next;
	int p,q;
	p=0;
	q=0;
	cout<<endl<<"下面開始語法分析:"<<endl;
	while(temp!=NULL)
	{
		int w;
		w=ID1(temp->code);
		p=yufa_main(w);
		if(p==1) break;
		if(p==0)
			temp=temp->next;
		if(temp==NULL) q=1;
	}//語法分析
	if(q==1)
		while(1)
		{
			p=yufa_main(17);
			if(p==3) break;
		}//最后輸入$來完成語法分析
	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;
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色偷偷成人一区二区三区91| 日韩福利电影在线观看| 亚洲国产欧美日韩另类综合| 视频在线观看91| 国产一区不卡视频| 色偷偷一区二区三区| 日韩欧美综合一区| 国产精品―色哟哟| 午夜亚洲国产au精品一区二区| 久久99精品网久久| 91免费视频大全| 欧美va在线播放| 亚洲日本在线看| 轻轻草成人在线| 91蝌蚪porny| 欧美一区二区三区男人的天堂 | 日本美女视频一区二区| 国产精品综合av一区二区国产馆| 色诱视频网站一区| 欧美成人精品1314www| 中文字幕日本乱码精品影院| 日本一区中文字幕| 成人av电影在线观看| 91精品国产手机| 国产精品欧美经典| 美腿丝袜一区二区三区| 91影院在线免费观看| 欧美大尺度电影在线| 亚洲少妇30p| 国产一区二区在线影院| 欧美少妇性性性| 国产精品私房写真福利视频| 奇米色777欧美一区二区| 91在线码无精品| 久久久99久久精品欧美| 午夜激情久久久| 97se亚洲国产综合自在线观| 久久综合久久综合久久| 午夜精品久久一牛影视| 不卡大黄网站免费看| 精品国产自在久精品国产| 亚洲国产wwwccc36天堂| 99这里只有精品| 久久久噜噜噜久久中文字幕色伊伊| 亚洲成人动漫在线免费观看| av电影天堂一区二区在线观看| 精品国产1区二区| 日韩一区精品字幕| 欧美亚洲禁片免费| 亚洲欧美乱综合| 波多野结衣亚洲| 国产日韩精品一区二区浪潮av | 日韩三级高清在线| 亚洲成人av在线电影| 91网站在线播放| 国产精品成人一区二区三区夜夜夜| 精品一区二区三区在线视频| 欧美日韩一区二区三区视频| 亚洲欧美日韩综合aⅴ视频| 懂色av噜噜一区二区三区av| 欧美精品一区二| 激情综合色播五月| 日韩精品一区二区三区中文不卡 | 欧美人xxxx| 伊人色综合久久天天| 暴力调教一区二区三区| 国产精品无圣光一区二区| 丁香六月久久综合狠狠色| 久久影院电视剧免费观看| 久久99久久久久久久久久久| 欧美一区二区网站| 免费久久精品视频| 日韩视频一区在线观看| 日本人妖一区二区| 日韩一二三四区| 美女视频免费一区| 日韩精品一区二区三区中文不卡 | 久久综合一区二区| 国产在线精品一区二区 | 成人h版在线观看| 国产精品久久久久影视| 北岛玲一区二区三区四区| 最新国产成人在线观看| 91久久精品国产91性色tv| 一区二区三区欧美日韩| 在线观看中文字幕不卡| 亚洲国产美国国产综合一区二区| 欧美日韩极品在线观看一区| 视频一区在线视频| 精品久久久久久久久久久久包黑料| 久久丁香综合五月国产三级网站| 2欧美一区二区三区在线观看视频| 国产一区二区不卡在线 | 在线亚洲+欧美+日本专区| 亚洲一区二区三区三| 69精品人人人人| 久久国产精品色婷婷| 中文字幕不卡在线| 一本色道亚洲精品aⅴ| 亚洲大片一区二区三区| 日韩精品一区二区三区在线播放 | 中文字幕在线免费不卡| 欧美在线啊v一区| 美女视频黄 久久| 国产欧美日韩亚州综合| 91碰在线视频| 婷婷成人综合网| 精品国产第一区二区三区观看体验| 粉嫩av一区二区三区| 亚洲午夜视频在线| 日韩精品一区二区三区视频在线观看 | 9久草视频在线视频精品| 亚洲综合小说图片| 欧美一卡二卡三卡四卡| 国产精品996| 亚洲一二三四久久| 久久亚洲一区二区三区明星换脸| 97久久精品人人爽人人爽蜜臀| 丝袜a∨在线一区二区三区不卡| 欧美一区二区三区四区高清| 成人精品一区二区三区四区| 性久久久久久久| 久久精品无码一区二区三区| 色婷婷狠狠综合| 狠狠狠色丁香婷婷综合激情| 亚洲精品午夜久久久| 精品久久免费看| 在线区一区二视频| 国产九九视频一区二区三区| 亚洲大片一区二区三区| 亚洲国产成人午夜在线一区| 欧美日韩一区二区三区四区五区| 国产成人免费xxxxxxxx| 性欧美大战久久久久久久久| 国产精品女同一区二区三区| 欧美一区二区三区免费视频| 99精品视频在线观看免费| 毛片基地黄久久久久久天堂| 一区二区三区日韩欧美精品| 国产丝袜美腿一区二区三区| 69堂成人精品免费视频| 91麻豆免费观看| 国产精品99久久久久久宅男| 91老师国产黑色丝袜在线| 久久99精品视频| 亚洲一区二区三区视频在线 | 97久久精品人人做人人爽| 精品亚洲免费视频| 亚洲不卡一区二区三区| 国产精品毛片高清在线完整版| 日韩精品一区二区三区在线 | 蜜桃精品视频在线观看| 一级特黄大欧美久久久| 欧美激情中文不卡| 精品少妇一区二区三区免费观看 | 亚洲国产成人精品视频| 中文字幕av一区二区三区免费看| 91精品国产综合久久精品麻豆 | 午夜欧美大尺度福利影院在线看 | 欧美日精品一区视频| www.激情成人| 国产成人福利片| 国产在线播放一区二区三区| 男女男精品视频| 日本中文字幕一区二区有限公司| 亚洲最新视频在线观看| 亚洲欧洲国产日韩| 国产午夜精品一区二区三区四区 | 成人一区二区三区在线观看| 精品一区二区在线观看| 免费在线观看日韩欧美| 肉色丝袜一区二区| 亚洲成人精品影院| 五月天一区二区三区| 亚洲电影在线播放| 亚洲一卡二卡三卡四卡无卡久久| 一区二区三区在线影院| 亚洲三级在线观看| 亚洲精品一卡二卡| 亚洲精品久久久久久国产精华液| 亚洲日本va在线观看| 一色屋精品亚洲香蕉网站| 国产精品素人一区二区| 欧美国产综合色视频| 国产精品日韩成人| 国产精品久久久久影视| 中文字幕一区二区三区视频 | 欧美亚洲动漫精品| 欧美色图一区二区三区| 欧美人体做爰大胆视频| 欧美一级爆毛片| 日韩精品自拍偷拍| 欧美精品一区二区三区在线播放| 久久久亚洲精品一区二区三区| 久久久91精品国产一区二区精品| 中文字幕高清不卡| 亚洲精品成人天堂一二三| 亚洲国产日日夜夜| 免费久久99精品国产| 国产在线视频一区二区三区|