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

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

?? main.cpp

?? 編譯器很好用
?? CPP
字號:
#include<iostream.h>
#include<fstream.h>
#include"scanner.h"
#include"function&struct.h"
#include"stack.h"
///////////////////////////////////////////////////////////////////////////////////////////
//全局變量定義
int flag=1;					//判斷程序是否出錯,開始時置1為正確
extern int lineno;			//行號,于Scanner.h中定義
char token[11];				//字符緩沖區
table* t_first;				//數據區的首指針
quad* q_first,*q_last;		//四元式鏈的首,末指針
char label_temp[10][11];	//標識符的臨時數組,只是在IDT中用到,默認只能存十個
stack<int> Stack;
int temp_vary=2001;			//生成四元式時用到的臨時變量序號
int numoflabel;				//標識符緩沖區
///////////////////////////////////////////////////////////////////////////////////////////


//語義函數定義
int BLK(ifstream&,int);
int constant(ifstream&,int);
int vary(ifstream&,int);
int funcpro(ifstream&,int);
int CS(ifstream&,int);
int IDT(ifstream&,int);
int sentence(ifstream&,int,int&);
int ET(ifstream&,int);
int CE(ifstream&,int,int&,int&);
int E(ifstream&,int);
int T(ifstream&,int);
int F(ifstream&,int);
//出錯函數
void error(int);
///////////////////////////////////////////////////////////////////////////////////////////

void main( )
{
	int a;
	t_first=new table(NULL,-1);
	t_first->next=NULL;
	
	ifstream sf("c:\\file.txt");
	if(sf.fail())
	{
		cerr<<"error opening file file.txt\n";
		return;
	}
	a=scanner(sf);

	if(a==13)		a=scanner(sf);
	if(a==21)		a=scanner(sf);
	if(a!=24)		
		error(13);
	else
		a=scanner(sf);

	a=BLK(sf,a);


	if(a!=26)	
	error(14);

	cout<<"this syntax has been completed!"<<endl;
	if(flag)
		cout<<"this grammar of source program is regular."<<endl;
	else
		cout<<"this grammar of source program is wrong!"<<endl;
	
	sf.close();

	quad* p=q_first;
	while(p!=NULL&&flag==1)
	{
		cout<<p->num<<"( "<<p->OP<<","<<p->arg1<<","<<p->arg2<<","<<p->result<<")"<<endl;
		p=p->next;
	}
}
///////////////////////////////////////////////////////////////////////////////////////////

void error(int err)
{
	cout<<lineno<<" line! :";
	switch(err)
	{
	case 0: cout<<" expected'('"<<endl;		break;
	case 1: cout<<" expected'因子'"<<endl;	break;
	case 2: cout<<" expected':='"<<endl;	break;
	case 3: cout<<" expected'then'"<<endl;	break;
	case 4: cout<<" expected'do'"<<endl;	break;
	case 5: cout<<" expected')'"<<endl;		break;
	case 6: cout<<" expected'begin'"<<endl;	break;
	case 7: cout<<" expected'end'"<<endl;	break;
	case 8: cout<<" expected'標識符'"<<endl;break;
	case 9: cout<<" expected'常量'"<<endl;	break;
	case 10: cout<<" expected'='"<<endl;	break;
	case 11: cout<<" expected':'"<<endl;	break;
	case 12: cout<<" 缺interger說明"<<endl;	break;
	case 13: cout<<" expected';'"<<endl;	break;
	case 14: cout<<" expected'.'"<<endl;	break;
	case 15: cout<<" 不認識字符"<<endl;		break;
	case 16: cout<<" 標識符重定義"<<endl;	break;
	case 17: cout<<" 整數越界"<<endl;		break;
	case 18: cout<<" 標識符未定義"<<endl;	break;
	default: cout<<" ..."<<endl;			break;
	}
	flag=0;
}


///////////////////////////////////////////////////////////////////////////////////////////
int BLK(ifstream& sf,int a)
{
	if(a==27)							//過程定義
	{
		a=scanner(sf);					
		//缺處理形參
		if(a!=28)						//存在形參的處理
		{
			a=IDT(sf,a);
			if(a!=25)					//缺:
				error(11);
			else
				a=scanner(sf);

			if(a!=9)					//缺interger
				error(12);
			else
				a=scanner(sf);
			
		}

		if(a!=28)					//缺 )
			error(5);	
		else
			a=scanner(sf);

		if(a!=25)					//缺:
			error(11);
		else
			a=scanner(sf);

	if(a!=9)						//缺interger
		error(12);
	else
		a=scanner(sf);
	
	if(a!=24)						//缺;
		error(13);
	else
		a=scanner(sf);
	}
	
	if(a==2)			//常量定義
	{
		a=scanner(sf);
		a=constant(sf,a);
	}
	
	if(a==18)   	//變量說明
	{
		a=scanner(sf);
		a=vary(sf,a);		
	}
	if(a==7)		//函數說明
	{
		a=scanner(sf);
		a=funcpro(sf,a);	
	}
	while(a==7)
	{
		a=scanner(sf);
		a=funcpro(sf,a);
	}

	if(a!=1)							//復合語句
		error(6);
	else
	{
		a=scanner(sf);
		a=CS(sf,a);
	}

	if(a!=24&&a!=26)					//缺';'或者'.'
	{
		error(13);
	}
	

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int constant(ifstream& sf,int a)
{
	if(a==21)	a=scanner(sf);
	if(a==38)   a=scanner(sf);
	if(a==22)
	{
		fill(token,1);//填表
		a=scanner(sf);
	}
	
	while(a==23)
	{
		a=scanner(sf);
		if(a==21)	a=scanner(sf);
		if(a==38)   a=scanner(sf);
		if(a==22)		
		{
			fill(token,1);//填表
			a=scanner(sf);
		}
	}

	if(a==24)
		a=scanner(sf);
	else
		error(13);

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int vary(ifstream& sf,int a)	
{	
	int temp=0;
	a=IDT(sf,a);
	
	if(a==25)	a=scanner(sf);

	if(a==9)	
	{
		while(temp<numoflabel)
			fill(label_temp[temp++],0);	//此處需填表
			
		a=scanner(sf);
	}
	
/*	while(a==24)						//當有多種數據類型時,被遮蔽的代碼會有用
	{
		numoflabel=0;
		a=scanner(sf);
		a=IDT(sf,a);
		if(a==25)	a=scanner(sf);
		if(a==9)
		{
			while(label_temp[numoflabel])
				fill(label_temp[numoflabel++],0);	//此處需填表
			
			a=scanner(sf);
		}
	}
*/
	if(a==24)	
		a=scanner(sf);
	else
		error(13);

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int funcpro(ifstream& sf,int a)
{
	if(a==21)	a=scanner(sf);

	a=BLK(sf,a);

	if(a!=24)
		error(13);
	else
		a=scanner(sf);
	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int CS(ifstream& sf,int a)
{
	int C_CHAIN;
	a=sentence(sf,a,C_CHAIN);
	
	while(a==24)
	{
		int NXQ=q_last->num+1;
		a=scanner(sf);
		backpatch(C_CHAIN,NXQ);
		a=sentence(sf,a,C_CHAIN);
	}
	
	if(a!=6)
		error(7);
	else
		a=scanner(sf);

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int IDT(ifstream& sf,int a)
{
	numoflabel=0;
	if(a==21)
	{	
		strcpy(label_temp[numoflabel++],token);	
		a=scanner(sf);
	}

	while(a==23)
	{
		a=scanner(sf);
		if(a==21)
		{	
			strcpy(label_temp[numoflabel++],token);	
			a=scanner(sf);
		}
	}

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int sentence(ifstream& sf,int a,int& S_CHAIN)
{
	int temp=0;
	int E_TC,E_FC,S1_CHAIN,S2_CHAIN,W_QUAD;
	switch(a)
	{
	case 21:
				Stack.Push(entry(token));
				a=scanner(sf);
				if(a==44) a=scanner(sf);	//賦值語句				
				a=E(sf,a);
				Gen(":=",Stack.Pop(),Stack.Pop(),-1);
				S_CHAIN=0;
				break;
	case 1:		a=scanner(sf);
				a=CS(sf,a);					//復合語句
				S_CHAIN=0;
				break;
	case 8:				
				a=scanner(sf);
				a=CE(sf,a,E_TC,E_FC);					//if語句
				
				if(a!=16)	
					error(3);
				else{
					backpatch(E_TC,q_last->num+1);
					a=scanner(sf);
				}

				a=sentence(sf,a,S1_CHAIN);

				if(a==5)
				{
					int NXQ=q_last->num+1;
					a=scanner(sf);
					Gen("j",0,-1,-1);
					backpatch(E_FC,NXQ);
					merg(S1_CHAIN,NXQ);
					a=sentence(sf,a,S2_CHAIN);
					
					S_CHAIN=merg(S1_CHAIN,S2_CHAIN);//書上為T_CHAIN
					
					return a;
				}
				
				S_CHAIN=merg(E_FC,S1_CHAIN);
				break;
	case 19:	W_QUAD=q_last->num+1;
				a=scanner(sf);
				a=CE(sf,a,E_TC,E_FC);					//while語句
				
				if(a==4)
				{
					a=scanner(sf);
					backpatch(E_TC,q_last->num+1);
					a=sentence(sf,a,S1_CHAIN);
					backpatch(S1_CHAIN,W_QUAD);
					Gen("j",W_QUAD,-1,-1);
					S_CHAIN=E_FC;
				}
				else
					error(4);
				break;
	case 14:	a=scanner(sf);
				if(a==27)					//read語句
					a=scanner(sf);
				else
					error(0);

				a=IDT(sf,a);

				if(a==28)
				{
					while(temp<numoflabel)
						Gen("in",entry(label_temp[temp++]),-1,-1);
					a=scanner(sf);
				}
				else
					error(5);
				S_CHAIN=0;
				break;

	case 20:	a=scanner(sf);
				if(a==27)					//write語句
					a=scanner(sf);
				else
					error(0);

				a=ET(sf,a);

				if(a==28)
				{
					stack<int> tempstack;	//建立一個臨時棧,完成Stack棧的倒棧
					while(!Stack.IsEmpty())
						tempstack.Push(Stack.Pop());//
					while(!tempstack.IsEmpty())
						Gen("out",tempstack.Pop(),-1,-1);
					a=scanner(sf);
				}
				else
					error(5);
				S_CHAIN=0;
				break;
	default:	
				S_CHAIN=0;
				break;
	}

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int ET(ifstream& sf,int a)
{
		a=E(sf,a);
	while(a==23)
	{
		a=scanner(sf);
		a=E(sf,a);
	}

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int CE(ifstream& sf,int a,int& E_TC,int& E_FC)
{	
	a=E(sf,a);
	
	while(a>=38&&a<=43)
	{
		int temp=a;
		a=scanner(sf);
		a=E(sf,a);
		switch(temp)
		{
		case 38:	E_TC=q_last->num+1;
					E_FC=q_last->num+2;
					Gen("jeq",0,Stack.Pop(),Stack.Pop());
					Gen("j",0,-1,-1);
					break;
		case 39:	E_TC=q_last->num+1;
					E_FC=q_last->num+2;
					Gen("jl",0,Stack.Pop(),Stack.Pop());
					Gen("j",0,-1,-1);
					break;
		case 40:	E_TC=q_last->num+1;
					E_FC=q_last->num+2;
					Gen("jg",0,Stack.Pop(),Stack.Pop());
					Gen("j",0,-1,-1);
					break;
		case 41:	E_TC=q_last->num+1;
					E_FC=q_last->num+2;
					Gen("jne",0,Stack.Pop(),Stack.Pop());
					Gen("j",0,-1,-1);
					break;
		case 42:	E_TC=q_last->num+1;
					E_FC=q_last->num+2;
					Gen("jle",0,Stack.Pop(),Stack.Pop());
					Gen("j",0,-1,-1);
					break;
		case 43:	E_TC=q_last->num+1;
					E_FC=q_last->num+2;
					Gen("jge",0,Stack.Pop(),Stack.Pop());
					Gen("j",0,-1,-1);
					break;
		}

	}

	return a;
}


///////////////////////////////////////////////////////////////////////////////////////////
int E(ifstream& sf,int a)			//沒有處理單目運算符
{
	a=T(sf,a);

	while(a==34||a==35)
	{
		int temp=a;
		a=scanner(sf);
		a=T(sf,a);
		switch(temp)
		{
		case 34:	Gen("+",temp_vary,Stack.Pop(),Stack.Pop());
						Stack.Push(temp_vary++);
								break;
		case 35:	Gen("-",temp_vary,Stack.Pop(),Stack.Pop());
						Stack.Push(temp_vary++);
								break;
		}
	}

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int T(ifstream& sf,int a)
{
	a=F(sf,a);

	while(a==3||a==36||a==37)
	{
		int temp=a;
		a=scanner(sf);
		a=F(sf,a);
		switch(temp)
		{
		case 3:		Gen("div",temp_vary,Stack.Pop(),Stack.Pop());
						Stack.Push(temp_vary++);
								break;
		case 36:	Gen("*",temp_vary,Stack.Pop(),Stack.Pop());
						Stack.Push(temp_vary++);
								break;
		case 37:	Gen("/",temp_vary,Stack.Pop(),Stack.Pop());
						Stack.Push(temp_vary++);
								break;
		}		
	}

	return a;
}

///////////////////////////////////////////////////////////////////////////////////////////
int F(ifstream& sf,int a)				//因子文法沒有改寫
{
	switch(a)
	{
	case 21:	Stack.Push(entry(token));
				a=scanner(sf);
				if(a==27)
				{
					a=scanner(sf);
					a=ET(sf,a);
					
					if(a!=28)
						error(5);
					else
						a=scanner(sf);
					break;
				}else
					break;
	case 27:	a=scanner(sf);
				a=E(sf,a);
					
				if(a!=28)
					error(5);
				else
					a=scanner(sf);

				break;
	case 22:	Stack.Push(getconst());
				a=scanner(sf);
				break;
	}

	return a;
}
	

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxxxxxx| 91影视在线播放| 国产精品91一区二区| 亚洲.国产.中文慕字在线| 国产精品欧美极品| 中文久久乱码一区二区| 久久久久久久久一| 国产婷婷色一区二区三区在线| 日韩你懂的电影在线观看| 欧美一区二区三区在线电影| 日韩一区二区三区免费看 | 国产原创一区二区三区| 免费久久99精品国产| 麻豆国产欧美日韩综合精品二区| 丝袜美腿一区二区三区| 青青国产91久久久久久| 激情丁香综合五月| 成人午夜私人影院| 91麻豆精品一区二区三区| 欧美视频日韩视频| 91精品国产黑色紧身裤美女| 欧美tk丨vk视频| 中文av一区二区| 亚洲综合在线五月| 免费三级欧美电影| 成人午夜视频在线观看| 欧美在线你懂的| 亚洲精品一区二区三区精华液 | 国产婷婷色一区二区三区四区| 国产亚洲欧洲997久久综合| 国产精品久久久久aaaa樱花| 亚洲美女视频在线观看| 五月天亚洲精品| 风间由美一区二区三区在线观看 | 中文字幕不卡的av| 一区二区三区不卡视频| 人人精品人人爱| 成人精品小蝌蚪| 欧美精品1区2区3区| 国产欧美精品区一区二区三区| 亚洲精品成人少妇| 极品少妇一区二区| 欧美主播一区二区三区| 亚洲成人午夜电影| 国产精品中文有码| 欧美日韩免费视频| 国产精品沙发午睡系列990531| 五月激情综合婷婷| 一本一道波多野结衣一区二区| 日韩三级视频在线看| 樱桃视频在线观看一区| 国产在线精品一区二区不卡了| 91国偷自产一区二区三区观看| 久久综合九色综合欧美98| 五月天欧美精品| 在线精品视频免费播放| 国产精品人人做人人爽人人添| 日本伊人午夜精品| 欧美日韩在线电影| 亚洲视频免费在线| 成人动漫一区二区在线| 久久奇米777| 狠狠色丁香久久婷婷综| 在线播放视频一区| 天堂成人国产精品一区| 日本精品视频一区二区| 亚洲三级在线免费观看| 97精品久久久久中文字幕| 欧美国产禁国产网站cc| 国产综合色精品一区二区三区| 91精品国产麻豆国产自产在线| 亚洲高清中文字幕| 欧美女孩性生活视频| 亚洲一区在线观看免费观看电影高清| 福利视频网站一区二区三区| 亚洲日本在线天堂| 99re热视频精品| 亚洲天堂久久久久久久| 日本韩国欧美国产| 亚洲激情五月婷婷| 欧洲一区在线电影| 亚洲小说春色综合另类电影| 欧美色爱综合网| 亚洲福利一区二区| 日韩女优视频免费观看| 久久91精品国产91久久小草| 欧美精品一区二区三区视频| 免费看欧美女人艹b| 精品国产91洋老外米糕| 精东粉嫩av免费一区二区三区| 精品国产123| 国产麻豆91精品| 中文字幕在线一区二区三区| 99久久免费国产| 亚洲一线二线三线视频| 欧美一区二区视频观看视频| 麻豆精品国产91久久久久久| 久久蜜桃香蕉精品一区二区三区| 国产激情91久久精品导航 | 国产不卡在线一区| 亚洲欧美一区二区在线观看| 色综合激情久久| 免费观看日韩av| 国产精品久久久久婷婷二区次| 色综合久久中文综合久久牛| 亚洲成人第一页| 久久久不卡网国产精品二区| 91视频一区二区三区| 美腿丝袜亚洲色图| 国产精品九色蝌蚪自拍| 欧美老女人在线| 成人美女在线观看| 日韩激情在线观看| 国产精品欧美一区二区三区| 欧美精品在线观看播放| 成人aa视频在线观看| 日韩电影免费一区| 亚洲日本va午夜在线影院| 欧美一区二区私人影院日本| 成人午夜激情影院| 日本亚洲电影天堂| 亚洲丝袜美腿综合| 国产日韩欧美精品在线| 欧美日韩一区 二区 三区 久久精品| 国产精品一区二区免费不卡 | 欧美电影免费观看高清完整版在 | 免费在线观看不卡| 亚洲免费在线电影| 久久午夜电影网| 欧美巨大另类极品videosbest | www.性欧美| 日韩高清在线观看| 亚洲欧美另类综合偷拍| 精品成人一区二区三区四区| 欧美三级日韩三级| 97久久精品人人做人人爽| 国产精品一二三区| 精品中文av资源站在线观看| 亚洲国产视频在线| 亚洲欧美另类图片小说| 国产精品网站一区| 久久久久久99久久久精品网站| 欧美一区二区三区精品| 欧美无砖专区一中文字| 99久久99久久综合| 成人av在线资源网站| 成人免费看视频| 国产成人亚洲综合a∨婷婷| 看国产成人h片视频| 亚洲18女电影在线观看| 亚洲成人一区在线| 午夜亚洲福利老司机| 午夜久久福利影院| 亚洲超碰97人人做人人爱| 亚洲一区二区三区精品在线| 亚洲天堂福利av| 玉米视频成人免费看| 亚洲精品中文在线影院| 一区二区三区日韩精品视频| 亚洲日本va午夜在线影院| 一区二区三区视频在线看| 亚洲最新视频在线观看| 亚洲综合自拍偷拍| 日韩精品福利网| 韩国欧美国产一区| 高清在线观看日韩| youjizz国产精品| 在线影院国内精品| 欧美色视频一区| 日韩欧美一区在线| 久久久国产精华| 亚洲三级电影网站| 亚洲v中文字幕| 国产综合色产在线精品| 成人亚洲一区二区一| 色综合咪咪久久| 成人午夜视频在线观看| 欧美视频一区二区三区四区| 欧美丰满少妇xxxbbb| 亚洲精品在线观看网站| 亚洲视频免费在线| 免费成人你懂的| av高清久久久| 91精品国产综合久久久久久久久久 | 不卡av免费在线观看| 91国产免费看| 精品国产一区二区三区忘忧草 | 国产美女在线观看一区| 成人av午夜电影| 欧美精品精品一区| 日本一区二区三区四区| 亚洲成人777| 成人午夜激情在线| 欧美一区日韩一区| 亚洲欧洲在线观看av| 另类小说一区二区三区| 91网页版在线| 欧美精品一区二区三区在线播放| 亚洲女人的天堂| 国产一区二区不卡在线 |