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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pascal.cpp

?? 《編譯原理實(shí)踐教程》中的程序作了一些擴(kuò)展
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
{
	lr1=action1[stack1[sp1]][change1(g_nExpCurChar.type)];
	if (lr1==-1)
	{
		printf("\n算術(shù)表達(dá)式或賦值語句出錯(cuò)!\n");
		getchar();
		exit(0);
	}
	if ((lr1<14)&&(lr1>=0))///////////////////////
	{
		sp1++;
		stack1[sp1]=lr1;
		if (g_nExpCurChar.type!=tempsy)
		{
			ssp++;
			num++;
			sstack[ssp].type=g_nExpCurChar.type;
			sstack[ssp].pos=g_nExpCurChar.pos;
		}
		g_nExpCurChar.type=ibuf[num].type;
		g_nExpCurChar.pos=ibuf[num].pos;
		lrparse1(num);
	}
	if((lr1>=100)&&(lr1<107))///////////////////////////
	{
		switch(lr1)
		{
		case 100:
			break;
		case 101:
			E.pos=newtemp();
			gen("+",sstack[ssp-2],sstack[ssp],E.pos+100);
			ssp=ssp-2;
			sstack[ssp].type=tempsy;
			sstack[ssp].pos=E.pos;
			sp1=sp1-3;
			break;
			/*E->E+E*/
		case 102:
			E.pos=newtemp();
			gen("*",sstack[ssp-2],sstack[ssp],E.pos+100);
			ssp=ssp-2;
			sstack[ssp].type=tempsy;
			sstack[ssp].pos=E.pos;
			sp1=sp1-3;
			break;
			/*E->E*E*/
		case 103:
			E.pos=sstack[ssp-1].pos;
			ssp=ssp-2;
			sstack[ssp].type=tempsy;
			sstack[ssp].pos=E.pos;
			sp1=sp1-3;
			break;
			/*E->(E)*/
		case 104:
			E.pos=sstack[ssp].pos;
			sp1--;
			break;
			/*E->i*/
		case 105:
			E.pos=newtemp();
			gen("-",sstack[ssp-2],sstack[ssp],E.pos+100);
			ssp=ssp-2;
			sstack[ssp].type=tempsy;
			sstack[ssp].pos=E.pos;
			sp1=sp1-3;
			break;
			/*E->E-E*/
		case 106:
			E.pos=newtemp();
			gen("/",sstack[ssp-2],sstack[ssp],E.pos+100);
			ssp=ssp-2;
			sstack[ssp].type=tempsy;
			sstack[ssp].pos=E.pos;
			sp1=sp1-3;
			break;
			/*E->E/E*/
		}
		g_nExpCurChar.type=tempsy;/*規(guī)約后為非終結(jié)符*/
		g_nExpCurChar.pos=E.pos;
		lrparse1(num);
	}
	if ((lr1==ACC)&&(stack1[sp1]==1))
	{
		/*歸約A->i:=E*/
		gen(":=",sstack[ssp],oth,ibuf[0].pos);
		ssp=ssp-3;
		sp1=sp1-3;
	}
}
/*********************布爾表達(dá)式的分析**************************/
int lrparse2(int num)
{
	int templabel;
	lr1=action2[stack1[sp1]][change2(g_nExpCurChar.type)];
	if (lr1==-1) 
	{	
		if (sign==2) printf("\nwhile語句出錯(cuò)!\n");
		if (sign==3) printf("\nif語句出錯(cuò)!\n");
		getchar();
		exit(0);
	}
	if ((lr1<16)&&(lr1>=0))
	{
		sp1++;
		stack1[sp1]=lr1;
		ssp++;
		sstack[ssp].type=g_nExpCurChar.type;
		sstack[ssp].pos=g_nExpCurChar.pos;
		if ((g_nExpCurChar.type!=tempsy)&&(g_nExpCurChar.type!=EA)&&(g_nExpCurChar.type!=EO)) num++;
		g_nExpCurChar.type=ibuf[num].type;
		g_nExpCurChar.pos=ibuf[num].pos;
		lrparse2(num);
	}
	if((lr1>=100)&&(lr1<109))
	{
		switch(lr1)
		{
		case 100:
			break;
		case 101:
			ntab2[label].tc=nxq;
			ntab2[label].fc=nxq+1;
			gen("jnz",sstack[ssp],oth,0);
			gen("j",oth,oth,0);
			sp1--;
			ssp--;
			label++;
			g_nExpCurChar.type=tempsy;
			break;
			/*E->i*/
		case 102:
			ntab2[label].tc=nxq;
			ntab2[label].fc=nxq+1;
			switch (sstack[ssp-1].pos)
			{
			case 0:
				gen("j<=",sstack[ssp-2],sstack[ssp],0);
				break;
			case 1:
				gen("j<",sstack[ssp-2],sstack[ssp],0);
				break;
			case 2:
				gen("j>=",sstack[ssp-2],sstack[ssp],0);
				break;
			case 3:
				gen("j>",sstack[ssp-2],sstack[ssp],0);
				break;
			case 4:
				gen("j<>",sstack[ssp-2],sstack[ssp],0);
				break;
			case 5:
				gen("j=",sstack[ssp-2],sstack[ssp],0);
				break;
			}
			gen("j",oth,oth,0);
			ssp=ssp-3;
			sp1=sp1-3;
			label++;
			g_nExpCurChar.type=tempsy;
			break;
			/*E->i rop i*/
		case 103:
			label=label-1;
			ssp=ssp-3;
			sp1=sp1-3;
			label++;
			g_nExpCurChar.type=tempsy;
			break;
			/*E->(E)*/
		case 104:
			label=label-1;
			templabel=ntab2[label].tc;
			ntab2[label].tc=ntab2[label].fc;
			ntab2[label].fc=templabel;
			ssp=ssp-2;
			sp1=sp1-2;
			label++;
			g_nExpCurChar.type=tempsy;
			break;
			/*E->not E*/
		case 105:
			backpatch(ntab2[label-1].tc,nxq);
			label=label-1;
			ssp=ssp-2;
			sp1=sp1-2;
			label++;
			g_nExpCurChar.type=EA;
			break;
			/*EA->E(1)and*/
		case 106:
			label=label-2;
			ntab2[label].tc=ntab2[label+1].tc;
			ntab2[label].fc=merg(ntab2[label].fc,ntab2[label+1].fc);
			ssp=ssp-2;
			sp1=sp1-2;
			label++;
			g_nExpCurChar.type=tempsy;
			break;
			/*E->EA E(2)*/
		case 107:
			backpatch(ntab2[label-1].fc,nxq);
			label=label-1;
			ssp=ssp-2;
			sp1=sp1-2;
			label++;
			g_nExpCurChar.type=EO;
			break;
		case 108:
			label=label-2;
			ntab2[label].fc=ntab2[label+1].fc;
			ntab2[label].tc=merg(ntab2[label].tc,ntab2[label+1].tc);
			ssp=ssp-2;
			sp1=sp1-2;
			label++;
			g_nExpCurChar.type=tempsy;
			break;
		}
		lrparse2(num);
	}
	if (lr1==ACC) return 1;
}
/***************測(cè)試字符是否為表達(dá)式中的值(不包括";")**************/
bool isavalidvalue(int value)
{
	switch (value)
	{
	case intconst:
	case ident:
	case plus:
	case times:
	case becomes:
	case lparent:
	case rparent:
	case rop:
	case op_and:
	case op_or:
	case op_not:
		////////////////////
	case subtract:
	case divide:
		////////////////////
		return true;
	default:
		return false;
	}
}
/*******************************************/
int lrparse()
{
	int i1=0;
	int num=0;
	/*指向表達(dá)式緩沖區(qū)*/
	if (isavalidvalue(g_nCurChar.type))
	{
		if(stack[sp].type==sy_while)
		{
			sign=2;/*sign=1,表達(dá)式為賦值語句;sign=2,表達(dá)式為布爾表達(dá)式。*/
		}
		else 
		{
			if (stack[sp].type==sy_if) sign=3;
			else sign=1;
		}
		do
		{
			ibuf[i1].type=g_nCurChar.type;
			ibuf[i1].pos=g_nCurChar.pos;
			readnu();
			i1++;
		}while(isavalidvalue(g_nCurChar.type));
		/*把表達(dá)式放入緩沖區(qū)*/
		ibuf[i1].type=sharp;
		pbuf--;
		/*指針后退1,需要嗎?*/
		sstack[0].type=sharp;
		ssp=0;
		/*符號(hào)棧底的初始化*/
		if (sign==1)
		{
			sp1=0;
			stack1[sp1]=0;
			/*狀態(tài)棧1的棧底初始化*/
			num=2;
			/*指向:=*/
			g_nExpCurChar.type=ibuf[num].type;
			g_nExpCurChar.pos=ibuf[num].pos;
			lrparse1(num);
			/*處理賦值語句*/
			g_nCurChar.type=a;
			/*當(dāng)前文法符號(hào)置為a(賦值語句)*/
		}
		if ((sign==2)||(sign==3))
		{
			pointmark++;
			labelmark[pointmark].nxq1=nxq;
			sp1=0;
			stack1[sp1]=0;
			num=0;
			g_nExpCurChar.type=ibuf[num].type;
			g_nExpCurChar.pos=ibuf[num].pos;
			lrparse2(num);
			labelmark[pointmark].tc1=ntab2[label-1].tc;
			labelmark[pointmark].fc1=ntab2[label-1].fc;
			/*處理布爾語句*/
			/*在處理完E,要回填真值鏈*/
			backpatch(labelmark[pointmark].tc1,nxq);
			g_nCurChar.type=e;
			/*當(dāng)前文法符號(hào)置為e(賦值語句)*/
		}
	}
	lr=action[stack[sp].pos][g_nCurChar.type];
	printf("stack[%d]=%d\t\tn=%d\t\tlr=%d\n",sp,stack[sp].pos,g_nCurChar.type,lr);



	if ((lr<19)&&(lr>=0))
	{
		sp++;
		stack[sp].pos=lr;
		stack[sp].type=g_nCurChar.type;
		readnu();
		lrparse();
	}
	if ((lr<=106)&&(lr>=100))
	{
		switch (lr)
		{
		case 100:break;
			/*S'->S*/
		case 101:
			printf("S->if e then S then S else S 歸約\n");
			sp=sp-6;
			g_nCurChar.type=S;
			/*歸約完if后,填then后面的無條件轉(zhuǎn)移語句*/
			fexp[labeltemp[pointtemp]].result=nxq;
			pointtemp--;
			if(stack[sp].type==sy_then)
			{
				gen("j",oth,oth,0);
				backpatch(labelmark[pointmark].fc1,nxq);
				pointtemp++;
				labeltemp[pointtemp]=nxq-1;
			}
			pointmark--;
			if(stack[sp].type==sy_do)
			{
				gen("j",oth,oth,labelmark[pointmark].nxq1);
				backpatch(labelmark[pointmark].fc1,nxq);
			}
			break;
			/*S->if e then S then S else S*/
		case 102:
			printf("S->while e do S 歸約\n");
			sp=sp-4;
			g_nCurChar.type=S;
			pointmark--;
			if(stack[sp].type==sy_do)
			{
				gen("j",oth,oth,labelmark[pointmark].nxq1);
				backpatch(labelmark[pointmark].fc1,nxq);
			}

			if(stack[sp].type==sy_then)
			{
				gen("j",oth,oth,0);
				fexp[labelmark[pointmark].fc1].result=nxq;
				pointtemp++;
				labeltemp[pointtemp]=nxq-1;
			}
			break;
			/*S->while e do S*/
		case 103:
			printf("S->begin L end 歸約\n");
			sp=sp-3;
			g_nCurChar.type=S;
			if(stack[sp].type==sy_then)
			{
				gen("j",oth,oth,0);
				backpatch(labelmark[pointmark].fc1,nxq);
				pointtemp++;
				labeltemp[pointtemp]=nxq-1;
			}
			if(stack[sp].type==sy_do)
			{
				gen("j",oth,oth,labelmark[pointmark].nxq1);
				backpatch(labelmark[pointmark].fc1,nxq);
			}
			break;
			/*S->begin L end*/
		case 104:
			printf("S->a 歸約\n");
			sp=sp-1;
			g_nCurChar.type=S;
			if(stack[sp].type==sy_then)
			{
				gen("j",oth,oth,0);
				backpatch(labelmark[pointmark].fc1,nxq);
				pointtemp++;
				labeltemp[pointtemp]=nxq-1;
			}
			if(stack[sp].type==sy_do)
			{
				gen("j",oth,oth,labelmark[pointmark].nxq1);
				backpatch(labelmark[pointmark].fc1,nxq);
			}
			break;
			/*S->a*/
		case 105:
			printf("歸約\n");
			sp=sp-1;
			g_nCurChar.type=L;
			break;
			/*L->S*/
		case 106:
			printf("L->S;L 歸約\n");
			sp=sp-3;
			g_nCurChar.type=L;
			break;
			/*L->S;L*/
		}
		getchar();
		pbuf--;
		lrparse();
	}
	if (lr==ACC) return ACC;
}
/*****************************disp1*************************/
void disptoken()
{
	printf("\n********************詞法分析結(jié)果***********************\n");
	for(int i=0;i<count;i++)
	{
		printf("%d\t%d\n",buf[i].type,buf[i].pos);
		if (i==20)
		{
			printf("Press any key to continue......\n");
			getchar();
		}
	}
	printf("\n程序總 %d 共行,產(chǎn)生了 %d 個(gè)二元式!\n",lnum,count);
	getchar();
}

void dispvarnametable()
{
	printf("\n*******************變量表*******************\n");
	for(int i=0;i<varnametableptr;i++)
	{
		printf("%d\t%s\n",i,varnametable[i]);
	}
	getchar();
}
/******************************************************/
void dispfourexp()
{
	int temp1=100;
	printf("\n********************四元式分析結(jié)果***********************\n");
	for(int i=100;i<nxq;i++)
	{
		printf("%d\t",i);
		printf("(%s\t,",fexp[i].op);
		if (fexp[i].arg1.type==ident)
			printf("%s\t,",varnametable[fexp[i].arg1.pos]);
		else 
		{
			if (fexp[i].arg1.type==tempsy)
				printf("T%d\t,",fexp[i].arg1.pos);
			else
			{
				if(fexp[i].arg1.type==intconst)
					printf("%d\t,",fexp[i].arg1.pos);
				else printf("\t,");
			}
		}
		if (fexp[i].arg2.type==ident)
			printf("%s\t,",varnametable[fexp[i].arg2.pos]);
		else
		{
			if (fexp[i].arg2.type==tempsy)
				printf("T%d\t,",fexp[i].arg2.pos);
			else 
			{
				if(fexp[i].arg2.type==intconst)
					printf("%d\t,",fexp[i].arg2.pos);
				else printf("\t,");
			}
		}
		if (fexp[i].op[0]!='j')
		{
			if(fexp[i].result>=100) printf("T%d\t)",fexp[i].result-100);
			else printf("%s\t)",varnametable[fexp[i].result]);
		}
		else printf("%d\t)",fexp[i].result);
		if (i==20)
		{
			printf("\nPress any key to continue......\n");
			getchar();
		}
		printf("\n");
	}
	getchar();
}

/*****************主程序**********************/
int main(void)
{
	if ((cfile=fopen("PAS.dat","r"))==NULL)/*打開c語言源文件*/
	{
		printf("Open PAS.dat failed!");
		return 0;
	}
	readchar();/*從源文件讀一個(gè)字符*/
	scan();/*詞法分析*/
	
	disptoken();
	dispvarnametable();

	/*初始化狀態(tài)棧棧底*/
	stack[sp].pos=0;
	stack[sp].type=-1;
	/*初始化狀態(tài)棧棧底*/
	stack1[sp1]=0;
	
	oth.type=-1;
	printf("\n*********狀態(tài)棧變化過程及規(guī)約順序************\n");
	readnu();
	/*從二元式讀一個(gè)字符*/
	lrparse();
	getchar();
	/*四元式的分析*/
	dispfourexp();
	fclose(cfile);
	printf("The proggy is fucked BY mephisto!!!!");
	getchar();
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av一区二区三区在线| 欧美一区二区三区思思人| 欧美怡红院视频| 精品国产一区二区亚洲人成毛片| 国产精品嫩草99a| 日韩二区三区在线观看| 一本到三区不卡视频| 久久亚洲免费视频| 午夜精品久久久久久久蜜桃app| 高清不卡在线观看| 日韩欧美视频在线| 亚洲一区在线观看视频| www.日韩精品| 久久精品欧美日韩精品| 日韩专区中文字幕一区二区| 91亚洲大成网污www| 国产免费观看久久| 岛国精品在线观看| 久久综合色之久久综合| 免费在线观看不卡| 欧美一区二区视频在线观看| 夜夜亚洲天天久久| 91蜜桃婷婷狠狠久久综合9色| 久久亚洲影视婷婷| 国产一区激情在线| 欧美本精品男人aⅴ天堂| 婷婷夜色潮精品综合在线| 色综合天天性综合| 亚洲欧美日韩精品久久久久| 国产露脸91国语对白| 久久婷婷一区二区三区| 麻豆极品一区二区三区| 日韩欧美一区二区久久婷婷| 视频在线观看一区| 337p亚洲精品色噜噜| 午夜伦理一区二区| 欧美一区二区视频在线观看2020| 五月天激情综合| 日韩亚洲欧美成人一区| 日韩精品一级中文字幕精品视频免费观看 | 日本视频免费一区| 欧美日本精品一区二区三区| 偷拍日韩校园综合在线| 91精品国产aⅴ一区二区| 日韩av电影免费观看高清完整版 | 亚洲人成精品久久久久| 91久久精品一区二区三区| 一区二区三区免费| 91精品国产综合久久精品图片| 日韩不卡一区二区三区| 精品国产自在久精品国产| 国产福利电影一区二区三区| 日韩福利视频导航| 欧美精品久久99| 久久精品国产99| 国产欧美精品区一区二区三区 | 欧美另类一区二区三区| 久久精品久久99精品久久| 久久久精品综合| 色一情一伦一子一伦一区| 亚洲一区二区三区影院| 91.成人天堂一区| 国产精品一区二区三区99| 国产精品视频观看| 欧美性做爰猛烈叫床潮| 麻豆精品国产传媒mv男同| 日本一区二区三区免费乱视频| 91首页免费视频| 免费一区二区视频| 亚洲丝袜另类动漫二区| 69久久99精品久久久久婷婷 | 天天色天天操综合| 久久精品视频一区二区三区| 色拍拍在线精品视频8848| 青青青爽久久午夜综合久久午夜| 欧美激情一区二区三区在线| 欧美色国产精品| 国产东北露脸精品视频| 亚洲国产三级在线| 国产精品天干天干在线综合| 欧美日韩在线播放三区| 国产成人三级在线观看| 日韩精品亚洲一区二区三区免费| 久久精品网站免费观看| 这里只有精品免费| 91在线免费看| 国产综合久久久久影院| 亚洲一区二区三区三| 国产欧美一区在线| 欧美一区二区三区影视| 色噜噜狠狠成人中文综合| 国产一区二区三区综合| 日本欧美在线观看| 亚洲一区在线观看视频| 日韩一区日韩二区| 国产日韩综合av| 日韩欧美亚洲国产另类| 欧美日韩国产片| 色94色欧美sute亚洲13| 不卡大黄网站免费看| 国内精品视频666| 日本不卡中文字幕| 亚洲成a人片在线不卡一二三区| 国产精品久久夜| 国产调教视频一区| 日韩欧美在线网站| 日韩一区二区三免费高清| 精品视频在线免费看| 91女人视频在线观看| 成人免费高清视频在线观看| 国产精品白丝jk白祙喷水网站 | 欧美一卡二卡三卡四卡| 欧美性极品少妇| 在线观看日韩电影| 99精品视频一区二区三区| 成人晚上爱看视频| 成人激情图片网| av电影一区二区| voyeur盗摄精品| 精品国产精品一区二区夜夜嗨| 欧美日韩免费视频| 欧美一区二区免费视频| 6080亚洲精品一区二区| 91麻豆精品国产无毒不卡在线观看| 欧美日韩精品一区二区天天拍小说| 在线观看亚洲精品视频| 欧美日韩精品一区二区天天拍小说| 欧美色爱综合网| 在线播放日韩导航| 日韩亚洲欧美综合| 精品日韩在线观看| 国产日韩欧美综合一区| 亚洲视频一区二区在线| 亚洲国产你懂的| 奇米在线7777在线精品| 激情五月婷婷综合网| 国产高清久久久| 91麻豆国产在线观看| 欧美日韩一区二区三区四区 | 91在线播放网址| 在线看国产一区二区| 欧美日韩国产大片| 精品国偷自产国产一区| 国产欧美精品一区二区色综合朱莉| 国产精品国产自产拍在线| 亚洲欧美色图小说| 人人狠狠综合久久亚洲| 国产精品系列在线观看| 在线看日韩精品电影| 日韩一级黄色片| 中文字幕第一区综合| 一二三四区精品视频| 日韩电影在线一区| 成a人片国产精品| 欧美日韩中文国产| 久久精品人人做人人爽人人 | 国产欧美视频一区二区| 亚洲色图第一区| 久久国产精品露脸对白| 97久久超碰国产精品电影| 欧美一区二区网站| 亚洲视频一区二区免费在线观看| 日韩国产欧美在线播放| 丁香激情综合国产| 欧美一级在线观看| 亚洲视频一区二区免费在线观看 | 亚洲靠逼com| 国产在线不卡一卡二卡三卡四卡| jlzzjlzz国产精品久久| 精品日产卡一卡二卡麻豆| 亚洲视频每日更新| 国产精品一区专区| 欧美日韩一区精品| 国产精品国产三级国产aⅴ无密码| 日韩电影在线免费| 一本久道久久综合中文字幕| 一区二区三区成人在线视频 | 亚洲日本欧美天堂| 狠狠色狠狠色综合| 91麻豆精品国产91久久久久久| 国产精品欧美综合在线| 看电视剧不卡顿的网站| 欧美亚州韩日在线看免费版国语版| 国产色91在线| 精品在线免费观看| 欧美日韩日日骚| 亚洲激情图片qvod| 成人免费看视频| 国产欧美一区二区精品仙草咪| 美女视频黄频大全不卡视频在线播放| 色久优优欧美色久优优| 国产精品日韩精品欧美在线| 黑人巨大精品欧美黑白配亚洲| 欧美日韩一级黄| 亚洲成人午夜影院| 欧美探花视频资源| 亚洲一区二区影院| 在线观看网站黄不卡| 专区另类欧美日韩| 色综合中文字幕国产 |