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

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

?? operation.h

?? LL(1)文法分析過程的可視化及教學應用研究
?? H
?? 第 1 頁 / 共 3 頁
字號:
	//-----------------------------------------------------------------

	for(k=0;k<fw;k++)
	{
		for(i=0;i<n;i++)
			if(G[i][0].letter==follow[k][0])
			{
				for(s=k+1;s<fw;s++)
					if(G[i][1].letter==follow[s][0])
					{
						sign=0;
						for(t=0;t<n;t++)
						{

							if(G[t][0].letter==follow[s][0])
							{
								ud=1;
								sign=1;

								insert_G(i+1);
								if(t>i)t++;
								if(G[t][1].letter!='@')
								{
								    for(j=1;j<=G[t][0].tag;j++)
									    G[i+1][j]=G[t][j];

									for(j=2;j<=G[i][0].tag;j++)
										G[i+1][j+G[t][0].tag-1]=G[i][j];

   								    G[i+1][0].tag=G[t][0].tag+G[i][0].tag-1;
								}
							   else
							   {
									for(j=2;j<=G[i][0].tag;j++)
									G[i+1][j-1]=G[i][j];
								    G[i+1][0].tag=G[i][0].tag-1;
									
									if(G[i+1][0].tag==0)
									{
										G[i+1][0].tag=1;
										G[i+1][1].letter='@';
									}
							   }
							   
							   G[i+1][0].letter=follow[k][0];
							}
						}
						if(sign==1)
						{
							del_G(i);
						    i--;

						}

						
						

	tt="";
    tttt="";
	
		for(tk=0;tk<fw;tk++)
		{
			tsign=0;
			for(ti=0;ti<n;ti++)
			{
				if(G[ti][0].letter==follow[tk][0])
				{
					if(tsign==0)
					{
						tsign=1;
						tt+="    ";
						tt+=follow[tk][0];
						tt+="->";
					}

					for(tj=1;tj<=G[ti][0].tag;tj++)
						tt+=G[ti][tj].letter;
					tt+='|';

				}
			}
			tt=tt.Left(tt.GetLength()-1);
			tt+="\r\n";
		}

	tttt="用左部為";
	tttt+=follow[s][0];
	tttt+="的產生式的右部\r\n代換左部為";
	tttt+=follow[k][0];
	tttt+="的產生式右部中的";
	tttt+=follow[s][0];
	tttt+="\r\n文法變為:\r\n";

	str+=tttt+tt;
	str+="\r\n";


					}
			}

		for(i=0;i<LEN;i++)
		{
			for(j=0;j<LEN;j++)
			       arr[i][j]=0;
			a[i]=0;
		}

		l=0;
		tc=follow[k][0];
		for(i=0;i<n;i++)
			if(G[i][0].letter==follow[k][0])
			{
				arr[l][0]=i;
				for(j=1;j<=G[i][0].tag;j++)
					arr[l][j]=G[i][j].letter;
				l++;
			}
		s=0;
		for(i=0;i<l-1;i++)
		{
			for(j=i+1;j<l;j++)
			{
				if(arr[i][1]==arr[j][1])
				{
					if(s==0)
					{
						a[0]=arr[i][0];
						a[1]=arr[j][0];
						s=2;
					}
					else
					{
						a[s]=arr[j][0];
						s++;
					}
				}
			}
			if(s!=0)
			{
				c=1;
				break;
			}
		}

		if(s!=0)
		{
			ud=1;

			for(c=1;;c++)
			{
				for(l=0;l<s;l++)
				{
					if(G[a[l]][0].tag<c||G[a[0]][c].letter!=G[a[l]][c].letter)
					{
					    e=1;
						c--;
						break;
					}
				}
				
				if(e==1)break;

			}

			for(t=0;t<256;t++)
				if(vn[t]==1)
				{
					vn[t]=2;
					G[n][0].letter=G[arr[i][0]][0].letter;
					G[n][0].tag=c+1;
					

					for(j=1;j<=c;j++)
					{
						G[n][j].letter=arr[i][j];
					}
					G[n][j].letter=t;
					n++;
				    
				    for(i=0;i<s;i++)
					{
						for(j=1;j<=G[a[i]][0].tag;j++)
							G[a[i]][j]=G[a[i]][j+c];
						G[a[i]][0].tag=G[a[i]][0].tag-c;
						G[a[i]][0].letter=t;

						if(G[a[i]][0].tag==0)
						{
							G[a[i]][0].tag=1;
							G[a[i]][1].letter='@';
						}
					}
                    
					if(G[n-1][0].letter==begin_ch)
					{
                        swap_G(a[0],n-1);
					}

					tag_mark();

				
	tt="";
    tttt="";
	
		for(tk=0;tk<fw;tk++)
		{
			tsign=0;
			for(ti=0;ti<n;ti++)
			{
				if(G[ti][0].letter==follow[tk][0])
				{
					if(tsign==0)
					{
						tsign=1;
						tt+="    ";
						tt+=follow[tk][0];
						tt+="->";
					}

					for(tj=1;tj<=G[ti][0].tag;tj++)
						tt+=G[ti][tj].letter;
					tt+='|';

				}
			}
			tt=tt.Left(tt.GetLength()-1);
			tt+="\r\n";
		}

	tttt="引入新非終結符";
	tttt+=t;
	tttt+="\r\n對";
	tttt+=tc;
	tttt+="的產生式提取左公共因子\r\n";
	tttt+="文法變為:\r\n";

	str+=tttt+tt;
	str+="\r\n";


					break;				
				
				}

				if(t>=256)
				{
					tag[4]=1;
					return str;
				}

		}

	}
	tag_mark();
	opt_G();

    get_first();
	get_follow();
	get_select();

	}

	tag_mark();
	opt_G();
	return str;
}


void CGram::swap_G(int a,int b)
{
	int j;
    for(j=0;j<=G[a][0].tag||j<=G[b][0].tag;j++)
	{
		G[n][j]=G[b][j];
		G[b][j]=G[a][j];
		G[a][j]=G[n][j];
		G[n][j].letter=0;
		G[n][j].tag=0;
		G[n][j].nultag=0;
	}

}

void CGram::opt_G()
{
    int sign,i,j,k;
	re_initial();

	r_vn[begin_ch]=1;

	sign=1;

	while(sign)
	{
		sign=0;
	    for(i=0;i<n;i++)
			if(r_vn[G[i][0].letter]==1)
				for(j=1;j<=G[i][0].tag;j++)
					if(G[i][j].tag==1&&r_vn[G[i][j].letter]!=1)
					{
						r_vn[G[i][j].letter]=1;
						sign=1;
					}
	}

	for(i=0;i<n;i++)
	{
		if(r_vn[G[i][0].letter]==0)
		{
			vn[G[i][0].letter]=1;
			add_vn[G[i][0].letter]=0;
			del_G(i);
			i--;
		}

		if(G[i][0].tag==1&&G[i][0].letter==G[i][1].letter)
		{
			del_G(i);
			i--;
		}

		for(k=i+1;k<n;k++)
			if(G[i][0].tag==G[k][0].tag&&G[i][0].letter==G[k][0].letter)
			{
				sign=0;
				for(j=1;j<=G[i][0].tag;j++)
					if(G[i][j].letter!=G[k][j].letter)
					{
						sign=1;
						break;
					}

				if(sign==0)
					del_G(k);
			}
	}

	tag_mark();

}


void CGram::del_G(int i)
{
	int k,j;
	for(k=i;k<n;k++)
		for(j=0;j<LEN;j++)
			G[k][j]=G[k+1][j];
	n--;
}

void CGram::insert_G(int i)
{
	int k,j;
	for(k=n;k>i;k--)
		for(j=0;j<LEN;j++)
			G[k][j]=G[k-1][j];
	for(j=0;j<LEN;j++)
	{
		G[i][j].letter=0;
		G[i][j].tag=0;
		G[i][j].nultag=0;
	}

	n++;
}

void CGram::tag_mark()
{
	int i,j,sign;

	re_initial();

	for(i=0;i<n;i++)
	{
		if(G[i][1].letter=='@')
		{
			G[i][1].nultag=1;
			G[i][0].nultag=1;
			nulchar[G[i][0].letter]=1;
			G[i][0].tag=1;
		}
		else
			G[i][1].nultag=0;


		for(j=1;j<=G[i][0].tag;j++)
		{
            if(vn[G[i][j].letter]!=0)
				G[i][j].tag=1;
			else
				G[i][j].tag=0;
		}	
	}

    sign=1;

	while(sign)
	{
		sign=0;
	    for(i=0;i<n;i++)
		    for(j=1;j<=G[i][0].tag;j++)
			    if(nulchar[G[i][j].letter]==1)
				    G[i][j].nultag=1;


	    for(i=0;i<n;i++)
		{
			for (j=1;j<=G[i][0].tag;j++)
				if(G[i][j].nultag==0)break;
			if(j>G[i][0].tag && nulchar[G[i][0].letter]!=1)
			{
				G[i][0].nultag=1;
				nulchar[G[i][0].letter]=1;
				sign=1;
			}
		}
	}

	for(i=0;i<n;i++)
	{
		if(num[G[i][0].letter]==0)
		{
			follow[fw][0]=G[i][0].letter;
			num[G[i][0].letter]=++fw;
		}

	    vn[G[i][0].letter]=2;

		for(j=1;j<=G[i][0].tag;j++)
		{
			if(G[i][j].tag==0)
                vt[G[i][j].letter]=2;
			else
				vn[G[i][j].letter]=2;
		}
	}
	
	vt['#']=2;
	vt['@']=3;
}


void CGram::add_first(char vn,int i)
{
	int k,j,t,sign;
	for(k=0;k<n;k++)
	{
		if(first[k][0]==vn)
		{
			for(j=1;j<=count_first[k];j++)
				if(first[k][j]!='@')
				{
					sign=0;
			        for(t=1;t<=count_first[i];t++)
				        if(first[i][t]==first[k][j])
					        sign=1;
				    if(sign==0)
					{
						count_first[i]++;
					    first[i][count_first[i]]=first[k][j];
						ud=1;
					}
				}
		}
	}
}



CString CGram::get_first()
{
    int i,j,t,sign,tk,tj,tud;


	CString str;

    for(i=0;i<n;i++)
	{
		first[i][0]=G[i][0].letter;
		count_first[i]=0;
		if(G[i][1].tag==0&&G[i][1].letter!='@')
		{
			count_first[i]++;
			first[i][count_first[i]]=G[i][1].letter;
			ud=1;
		    
		}
	}

	str="計算右部以終結符開始的非空規則\r\n得到:\r\n";

	for(tk=0;tk<n;tk++)
	{
	    str+="first(";
		str+=first[tk][0];
		str+="->";

		for(tj=1;tj<=G[tk][0].tag;tj++)
			str+=G[tk][tj].letter;

		str+=") = { ";
		
		for(tj=1;tj<=count_first[tk];tj++)
		{
			str+=first[tk][tj];
            if(tj!=count_first[tk])
			str+=',';
		}
	    str+=" }\r\n";
	}
	str+="\r\n";

	ud=1;
	while(ud)
	{
		ud=0;
	    for(i=0;i<n;i++)
		{
	    	for(j=1;j<=G[i][0].tag;j++)
			{
			    if(G[i][j].tag==1)
				{
					tud=ud;
					ud=0;
					add_first(G[i][j].letter,i);


					if(ud==1)
					{
						if(j!=1)
						{
							str+="由于";
							for(tk=1;tk<j;tk++)
								str+=G[i][tk].letter;
							str+="可以推導至空,所以\r\n";
						}

						str+="把";
						str+=G[i][j].letter;
						str+="的first集\r\n加入到";
						str+=G[i][0].letter;
						str+="->";
						for(tk=1;tk<=G[i][0].tag;tk++)
							str+=G[i][tk].letter;
						str+="的first集中\r\n得到:\r\n";

						for(tk=0;tk<n;tk++)
						{
							str+="first(";
							str+=first[tk][0];
							str+="->";

							for(tj=1;tj<=G[tk][0].tag;tj++)
								str+=G[tk][tj].letter;
							str+=") = { ";
		
							for(tj=1;tj<=count_first[tk];tj++)
							{
								str+=first[tk][tj];
								if(tj!=count_first[tk])
									str+=',';
							}
							str+=" }\r\n";
						}
						str+="\r\n";
					
					}//ud
					ud=(ud||tud);

				    if(G[i][j].nultag==0)break;
				}//if
				
				else
				{
					if(j!=1)
					{
						sign=0;
						for(t=1;t<=count_first[i];t++)
							if(first[i][t]==G[i][j].letter)
								sign=1;
						if(sign==0)
						{
							count_first[i]++;
							first[i][count_first[i]]=G[i][j].letter;
							ud=1;
						
							str+="由于";

							for(tk=1;tk<j;tk++)
								str+=G[i][tk].letter;
							str+="可以推導至空,所以\r\n把";
							str+=G[i][j].letter;
							str+="加入到";
							str+=G[i][0].letter;
							str+="->";
							for(tk=1;tk<=G[i][0].tag;tk++)
								str+=G[i][tk].letter;
							str+="的first集中\r\n得到:\r\n";
	
							for(tk=0;tk<n;tk++)
							{
								str+="first(";
								str+=first[tk][0];
								str+="->";

								for(tj=1;tj<=G[tk][0].tag;tj++)
									str+=G[tk][tj].letter;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品一区二区| 亚洲在线成人精品| 337p亚洲精品色噜噜噜| 欧美日韩在线电影| 欧美伦理视频网站| 日韩欧美成人激情| 国产蜜臀97一区二区三区| 国产精品久久久久7777按摩| 亚洲成av人片一区二区梦乃| 欧美大度的电影原声| 亚洲人精品午夜| 五月综合激情婷婷六月色窝| 日韩精品一二区| 麻豆精品久久久| 色国产综合视频| 国产亚洲精久久久久久| 欧美国产激情一区二区三区蜜月| 一片黄亚洲嫩模| 亚洲一区二区三区免费视频| 91女人视频在线观看| 欧美网站大全在线观看| 久久一留热品黄| 亚洲不卡一区二区三区| 99国内精品久久| 欧美不卡视频一区| 亚洲成人免费影院| 国产二区国产一区在线观看| 99久久99久久综合| 亚洲欧美偷拍另类a∨色屁股| 国产真实乱偷精品视频免| 欧美在线三级电影| 日韩欧美你懂的| 免费成人结看片| 欧美私人免费视频| 日韩一区二区中文字幕| 最新久久zyz资源站| 欧美变态tickle挠乳网站| 日韩精品乱码免费| 91在线视频官网| 欧美成人a∨高清免费观看| 最新热久久免费视频| 国产精品理论在线观看| 免费观看一级特黄欧美大片| 99精品一区二区三区| 久久久久久亚洲综合影院红桃| 亚洲乱码国产乱码精品精小说| 91免费版pro下载短视频| 国产日本欧洲亚洲| 蜜臀av在线播放一区二区三区| eeuss影院一区二区三区 | 欧美一区二区美女| 亚洲欧美成aⅴ人在线观看| 国产精品中文字幕一区二区三区| 欧美日韩免费电影| 一区二区在线观看免费视频播放| 色视频成人在线观看免| 亚洲色图都市小说| 一本久道中文字幕精品亚洲嫩| 国产精品网曝门| 亚洲成人一区二区在线观看| 91精品国产丝袜白色高跟鞋| 香港成人在线视频| 91精彩视频在线观看| 亚洲美女淫视频| 国产成人超碰人人澡人人澡| 久久综合久色欧美综合狠狠| 国产精品一区二区无线| 国产欧美一区二区在线| 视频一区二区三区在线| 欧美成人激情免费网| 美女网站在线免费欧美精品| 日韩三级在线免费观看| 韩国精品主播一区二区在线观看| 亚洲欧美日韩国产一区二区三区 | 91麻豆免费视频| 亚洲另类在线视频| 国产一区二区三区在线观看精品 | 欧美一激情一区二区三区| 午夜精品久久久久久久久久| 91精品国产色综合久久| 毛片不卡一区二区| 欧美一区二区三区白人| a在线欧美一区| 亚洲一线二线三线视频| 欧美丰满美乳xxx高潮www| 蜜臀精品久久久久久蜜臀| 色94色欧美sute亚洲线路一久| 午夜久久电影网| 欧美国产日本视频| 在线免费观看日本欧美| 欧美a级理论片| 五月婷婷色综合| 精品国产乱码久久久久久浪潮| 粉嫩一区二区三区性色av| 亚洲人成网站影音先锋播放| 成人免费视频视频| 国产白丝精品91爽爽久久| 亚洲欧美另类小说| 欧美丰满嫩嫩电影| 成人一道本在线| 免费成人你懂的| 一区二区三区国产精华| 精品少妇一区二区三区在线视频| 成人三级伦理片| 久久夜色精品国产噜噜av| 欧美r级在线观看| 在线视频欧美区| 国产成人精品在线看| 亚洲综合色网站| 亚洲精品欧美二区三区中文字幕| 91精品国产入口| 色哟哟日韩精品| 国产麻豆91精品| 亚洲精品中文字幕在线观看| 成人免费一区二区三区视频| 欧美高清www午色夜在线视频| 国产成人av一区二区三区在线观看| 亚洲第一久久影院| 久久综合狠狠综合| 日韩欧美国产高清| 欧美三级视频在线| 国内国产精品久久| 亚洲麻豆国产自偷在线| 欧美一区二区三级| 在线播放日韩导航| 欧美视频你懂的| 国产成人av电影免费在线观看| 日韩不卡一区二区三区| 亚洲电影欧美电影有声小说| 亚洲精品国产a| 中文字幕精品一区二区精品绿巨人 | 日本麻豆一区二区三区视频| 亚洲免费在线观看视频| 国产精品三级在线观看| 久久精品一区二区三区av| 26uuu成人网一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 色av成人天堂桃色av| 99久久精品国产一区二区三区 | 国产精品久久久久婷婷二区次 | 欧美剧情片在线观看| 欧美调教femdomvk| 精品99999| 成人夜色视频网站在线观看| 日本va欧美va欧美va精品| 亚洲欧美日韩系列| 亚洲精品一区二区三区香蕉| 91免费国产视频网站| 奇米一区二区三区| 中文字幕日韩一区| 亚洲视频一区二区在线| 国产精品无码永久免费888| 亚洲国产成人在线| 国产精品少妇自拍| 欧美国产日韩在线观看| 国产亚洲污的网站| 国产精品午夜在线观看| 久久久久久久久久久久久女国产乱| 欧美精选午夜久久久乱码6080| 91久久香蕉国产日韩欧美9色| 欧美性感一类影片在线播放| 在线免费观看日韩欧美| 欧美精品乱人伦久久久久久| 欧美一区二区三区男人的天堂| 欧美大黄免费观看| 国产精品热久久久久夜色精品三区| 久久精品视频一区二区| 亚洲丝袜另类动漫二区| 午夜天堂影视香蕉久久| 国产毛片一区二区| 欧美系列在线观看| 久久久不卡影院| 亚洲精品免费看| 国产麻豆一精品一av一免费 | 美日韩黄色大片| 豆国产96在线|亚洲| 欧美日韩一区二区三区免费看| 欧美成人乱码一区二区三区| 亚洲欧美激情在线| 久草在线在线精品观看| 91麻豆国产精品久久| 欧美剧情电影在线观看完整版免费励志电影| 日韩三级电影网址| 亚洲欧美日本在线| 丰满放荡岳乱妇91ww| 7777精品伊人久久久大香线蕉的 | 亚洲精品视频在线| 精品一区二区久久久| 国产91精品欧美| 波多野结衣的一区二区三区| 91丝袜美女网| 国产精品不卡一区二区三区| 麻豆精品一区二区三区| 制服丝袜av成人在线看| 一个色在线综合| 91国偷自产一区二区三区观看| 亚洲国产精品av| 99国产欧美另类久久久精品| 久久综合丝袜日本网| 国产又粗又猛又爽又黄91精品|