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

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

?? operation.h

?? LL(1)文法分析過程的可視化及教學(xué)應(yīng)用研究
?? H
?? 第 1 頁 / 共 3 頁
字號:
#include <iostream>
#include <fstream>
#include <cassert>
#include <iomanip>
#include <cstdlib>
#include <ctime>



#define LEN 200
#define L_STR 10000


using namespace std;

typedef struct Node
{
	char letter;
	int tag;
	int nultag;
}charNode;

class CGram
{
public:
    CGram();
	CGram(char *str);
	void initial();
	void re_initial();
	void save_grammar(char *str);
	CString change();
	void opt_G();
	CString get_first();
	CString get_follow();
	CString get_select();
	void tag_mark();
	CString creat_s();

	int tag[10];

	char begin_ch;
	char first[LEN][LEN];
	char follow[LEN][LEN];
	char select[LEN][LEN];
	int n,fw;
	int count_first[LEN];
	int count_follow[LEN];
	int count_select[LEN];
	charNode G[LEN][LEN];

	int vn[256];
	int vt[256];

private:

	void del_G(int i);
	void insert_G(int i);
	void swap_G(int a,int b);
	void add_str(char str1[],char str2[],int p);

	void add_first(char vn,int i);
	void add_follow(char vn,int k);
	void first_addto_follow(char vn,int k);

	int judge[LEN][256];
	int r_vn[256];

	int num[256];
	int nulchar[256];
	int add_vn[256];

	int ud;
};

CGram::CGram()
{
	initial();
}


CGram::CGram(char *str)
{
	initial();
	save_grammar(str);
}


void CGram::initial()
{
	int t1,t2;
	fw=0;
	n=0;
	ud=0;
	begin_ch=0;
	for(t1=0;t1<256;t1++)
	{
		num[t1]=0;
		nulchar[t1]=0;
		r_vn[t1]=0;
		vn[t1]=0;
		vt[t1]=0;
		add_vn[t1]=0;
	}

    for(t1=0;t1<10;t1++)
	{
		tag[t1]=0;
	}

	for(t1=0;t1<LEN;t1++)
		for(t2=0;t2<256;t2++)
			judge[t1][t2]=0;

	for(t1=0;t1<LEN;t1++)
	{
		for(t2=0;t2<LEN;t2++)
		{
			G[t1][t2].letter=0;
			G[t1][t2].tag=0;
			G[t1][t2].nultag=0;
			first[t1][t2]=0;
			follow[t1][t2]=0;
			select[t1][t2]=0;
		}
		count_first[t1]=0;
		count_follow[t1]=0;
		count_select[t1]=0;
	}

	for(t1=0;t1<256;t1++)
	{
		if(t1>='A'&&t1<='Z')
			vn[t1]=1;
		else
			vt[t1]=1;
	}
}


void CGram::re_initial()
{
	int t1,t2;
	fw=0;
	ud=0;
	for(t1=0;t1<256;t1++)
	{
		num[t1]=0;
		nulchar[t1]=0;
		r_vn[t1]=0;
		vn[t1]=0;
		vt[t1]=0;
//		add_vn[t1]=0;
	}

	for(t1=0;t1<LEN;t1++)
		for(t2=0;t2<256;t2++)
			judge[t1][t2]=0;

	for(t1=0;t1<LEN;t1++)
	{
		for(t2=0;t2<LEN;t2++)
		{
			first[t1][t2]=0;
			follow[t1][t2]=0;
			select[t1][t2]=0;
		}
		count_first[t1]=0;
		count_follow[t1]=0;
		count_select[t1]=0;
	}

	for(t1=0;t1<256;t1++)
	{
		if(t1>='A'&&t1<='Z')
			vn[t1]=1;
		else
			vt[t1]=1;
	}
}



void CGram::save_grammar(char *str)
{
	int i,k,j,sign=0;

	for(i=0,k=0;str[k];k++,i++)
	{
		if(sign==0)
		{
		    if(str[k]=='\n'||str[k]=='\r'||str[k]==' ')
			{
			    i--;
			    continue;
			}
		    if(vn[str[k]]==0||str[k+1]!='-'||str[k+2]!='>')
			{
			    initial();
			    tag[1]=1;
			    break;
			}
	
		    G[i][0].letter=str[k];

			if(i==0)begin_ch=str[k];

            k=k+3;
	        sign=1;
		}
		
		if(str[k]==' ')
		{
			i--;
			continue;
		}

		if(str[k]=='\n'||str[k]=='\r'||str[k]=='\0')
		{
			initial();
			tag[1]=1;
			break;
		}

		sign=0;


		for(j=1;str[k]!='\n'&&str[k]!='\0';k++,j++)
		{

			if(str[k]=='#')
			{
				initial();
				tag[2]=1;
				return;
			}
			if(str[k]=='\r'||str[k]==' ')
			{
				j--;
				continue;
			}

			if(str[k]=='|')
			{

				if(str[k+1]=='\r'||str[k+1]=='\n'||str[k+1]==' '||str[k+1]=='|'||str[k+1]=='\0')
				{
					initial();
					tag[1]=1;
					return;
				}

				G[i][0].tag=j-1;
				i++;
				G[i][0]=G[i-1][0];
				j=0;
				continue;
			}			
			
			G[i][j].letter=str[k];
		}
		G[i][0].tag=j-1;
	}
	n=i;

    if(n==0)tag[1]=1;

	tag_mark();
	opt_G();

	for(k=0;k<256;k++)
	{
		if(vn[k]==2)
		{
			for(i=0;i<n;i++)
				if(G[i][0].letter==k)break;
			if(i>=n)
			{
				initial();
				tag[3]=1;
				break;
			}
		}
	}

	for(i=0;i<n;i++)
		for(j=2;j<=G[i][0].tag;j++)
			if(G[i][j].letter=='@')
			{
				initial();
				tag[1]=1;
				break;
			}

	for(i=0;i<n;i++)
		if(G[i][0].tag==0)
			tag[1]=1;

}


CString CGram::change()
{
	int sign,i,k,j,l,s,t,c,e;
	char arr[LEN][LEN]={0};
	int a[LEN]={0};

	CString tt,tttt;
	int ti,tj,tk,tsign;
	CString str,tc;

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


	str="原文法為:\r\n";
		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;
						str+="    ";
						str+=follow[tk][0];
						str+="->";
					}

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

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

	ud=1;
	while(ud&&tag[4]!=1&&tag[0]!=0)
	{

		ud=0;
		re_initial();
		tag_mark();
		opt_G();

	for(k=0;k<fw;k++)
		for(i=0;i<n;i++)
			if(G[i][0].letter==follow[k][0])
			{
				sign=0;
				for(s=0;s<k;s++)
					if(G[i][1].letter==follow[s][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+="的產(chǎn)生式的右部\r\n代換左部為";
	tttt+=follow[k][0];
	tttt+="的產(chǎn)生式右部中的";
	tttt+=follow[s][0];
	tttt+="\r\n文法變?yōu)?\r\n";

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




					}

				if(G[i][0].letter==G[i][1].letter)
				{	

					tc=G[i][0].letter;
					tc+="->";
					for(tj=1;tj<=G[i][0].tag;tj++)
						tc+=G[i][tj].letter;
					
					if(add_vn[G[i][0].letter]==0)
					{
					for(t=0;t<256;t++)
				        if(vn[t]==1)
						{
							vn[t]=2;
							add_vn[G[i][0].letter]=t;
							for(c=0;c<n;c++)
							{
								if(G[c][0].letter==G[i][0].letter&&G[c][0].letter!=G[c][1].letter)
								{
									if(G[c][1].letter=='@')
									{
									    G[c][0].tag=1;
										G[c][1].letter=t;
									}

									else
									{									
								    	G[c][0].tag++;
									    G[c][G[c][0].tag].letter=t;
									}
																		
									if(i==0)e=c;
								}
							}

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

							if(i==0)
							    swap_G(i,e);

							G[n][0].letter=t;
							G[n][0].tag=1;
							G[n][1].letter='@';
							n++;
							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="引入新非終結(jié)符";
	tttt+=t;
	tttt+="\r\n消除";
	tttt+=tc;
	tttt+="的左遞歸\r\n";
	tttt+="文法變?yōu)?\r\n";

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



							break;
						}
						if(t>=256)
						{
					        tag[4]=1;
							return str;
						}
					}
					else
					{
					
					tc=G[i][0].letter;
					tc+="->";
					for(tj=1;tj<=G[i][0].tag;tj++)
						tc+=G[i][tj].letter;

						for(j=1;j<=G[i][0].tag;j++)
							G[i][j]=G[i][j+1];
						t=add_vn[G[i][0].letter];
						G[i][0].letter=t;
						G[i][G[i][0].tag].letter=t;
					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="用已經(jīng)引入的新非終結(jié)符";
	tttt+=t;
	tttt+="\r\n消除";
	tttt+=tc;
	tttt+="的左遞歸\r\n";
	tttt+="文法變?yōu)?\r\n";

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



					}


				}
			}
   

	tag_mark();
    opt_G();

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产高清一区| 精品一区二区三区的国产在线播放| 成人看片黄a免费看在线| 国产日韩欧美精品在线| 成人美女视频在线观看| 一区二区三区国产精华| 91精品国产综合久久精品性色| 奇米精品一区二区三区在线观看一| 日韩午夜av电影| 成人小视频在线观看| 一区二区免费在线| 91麻豆精品国产| 99这里只有久久精品视频| 亚洲视频一区二区免费在线观看| 欧美性感一类影片在线播放| 奇米影视在线99精品| 久久精品欧美日韩精品| 一本一道久久a久久精品| 午夜欧美大尺度福利影院在线看| 日韩欧美一二区| av电影一区二区| 性做久久久久久久免费看| 91精品国产色综合久久| 国产ts人妖一区二区| 亚洲午夜久久久久久久久电影网| 日韩欧美成人激情| www.欧美亚洲| 青娱乐精品在线视频| 国产精品色婷婷久久58| 欧美一区二区三区免费在线看 | 日产精品久久久久久久性色 | 亚洲精品在线网站| 91麻豆6部合集magnet| 久久99精品久久久| 一区二区三区四区不卡视频 | 91在线高清观看| 久久国产三级精品| 亚洲激情欧美激情| 久久久久久久久免费| 欧美亚洲高清一区| 国产成人亚洲综合a∨猫咪| 亚洲成a人v欧美综合天堂下载| 久久久蜜臀国产一区二区| 欧美日韩一区中文字幕| av电影在线观看不卡| 九九九精品视频| 天使萌一区二区三区免费观看| 中文字幕一区在线| 久久亚洲精精品中文字幕早川悠里| 欧美人与z0zoxxxx视频| 99久久亚洲一区二区三区青草| 美国一区二区三区在线播放| 亚洲最大成人网4388xx| 中文字幕不卡的av| 久久亚洲精华国产精华液| 制服.丝袜.亚洲.另类.中文| 色综合久久久久综合体桃花网| 国产精品99久久不卡二区| 日本视频一区二区| 亚洲成av人片在线观看| 亚洲综合激情另类小说区| 中文字幕乱码一区二区免费| 精品成人佐山爱一区二区| 3d成人动漫网站| 欧美精三区欧美精三区| 欧美三级日韩三级| 欧美在线一二三| 欧美亚洲国产怡红院影院| 一本久道中文字幕精品亚洲嫩| eeuss鲁片一区二区三区 | 成人免费毛片片v| 成人黄色国产精品网站大全在线免费观看 | 一区二区三区自拍| 1区2区3区精品视频| 国产精品久久777777| 国产精品久久久一区麻豆最新章节| 久久精品欧美一区二区三区麻豆| 亚洲精品在线观| 国产性天天综合网| 欧美激情一区二区三区不卡 | www国产精品av| 国产日韩亚洲欧美综合| 中文字幕av一区二区三区| 中文字幕av一区二区三区| 中文字幕一区二区三区乱码在线 | 欧美日韩国产精品自在自线| 欧美浪妇xxxx高跟鞋交| 欧美一区二区三区成人| 精品人在线二区三区| 精品福利视频一区二区三区| 久久精品亚洲精品国产欧美kt∨ | 亚洲综合男人的天堂| 天堂蜜桃一区二区三区| 蜜桃av一区二区在线观看| 精品一二线国产| 成人黄色小视频在线观看| 91丨九色丨蝌蚪丨老版| 欧美日韩成人一区二区| 精品久久久久久亚洲综合网| 欧美激情一区在线观看| 一区二区免费看| 免费观看日韩av| 成人一区二区视频| 色老汉一区二区三区| 欧美一区二区性放荡片| 国产日韩一级二级三级| 亚洲黄色在线视频| 美女脱光内衣内裤视频久久网站| 国产激情偷乱视频一区二区三区| 色哟哟亚洲精品| 日韩欧美资源站| 亚洲同性同志一二三专区| 日韩在线a电影| 国产福利一区二区三区视频在线 | 国产精品国产三级国产普通话三级 | 亚洲综合成人在线| 久久国产视频网| 一本到高清视频免费精品| 欧美一区二区久久久| 亚洲欧洲日产国产综合网| 国产精品18久久久久| 在线亚洲一区二区| 精品黑人一区二区三区久久| 亚洲美女区一区| 久草热8精品视频在线观看| 一本色道久久加勒比精品| 欧美大片在线观看一区| 一区二区高清在线| 国产乱淫av一区二区三区| 欧美视频你懂的| 国产精品久久久久久久蜜臀| 蜜臀精品一区二区三区在线观看| 91丝袜美女网| 国产精品网站在线| 激情五月婷婷综合网| 欧美三片在线视频观看| 欧美激情一区二区三区不卡| 蜜臀av一区二区在线观看| 91电影在线观看| 国产精品视频一区二区三区不卡| 美女高潮久久久| 欧美日韩国产在线观看| 自拍偷拍欧美激情| 成人久久18免费网站麻豆| 欧美一区二区日韩| 五月天激情综合| 亚洲欧美色综合| 亚洲成av人片观看| 成人深夜视频在线观看| 91精品国产综合久久久久| 亚洲精品日日夜夜| fc2成人免费人成在线观看播放| 欧美成人精品3d动漫h| 日日欢夜夜爽一区| 欧美日韩精品一区视频| 亚洲综合色自拍一区| 在线视频观看一区| 一区二区三区波多野结衣在线观看| 成人av综合一区| 国产精品久久久久影院亚瑟 | 亚洲欧美日韩中文播放 | 成人av综合一区| 亚洲国产精品精华液ab| 国产精品一区二区在线看| 国产日韩欧美精品电影三级在线| 亚洲一级电影视频| 97se狠狠狠综合亚洲狠狠| 亚洲国产精品成人综合| 久久精品国产第一区二区三区| 日韩一卡二卡三卡国产欧美| 亚洲超碰97人人做人人爱| 91成人国产精品| 亚洲美女视频在线观看| 99免费精品视频| 中文字幕av在线一区二区三区| 亚洲午夜久久久久久久久电影网| 欧美日韩在线电影| 亚洲第一福利视频在线| 欧美日韩国产三级| 久久精品国产久精国产| 日韩精品在线网站| 久久国产精品露脸对白| 久久综合九色综合欧美亚洲| 激情五月婷婷综合网| 久久婷婷久久一区二区三区| 成人福利视频在线| 亚洲影院理伦片| 日韩欧美一级片| 国产精一区二区三区| 国产日韩欧美精品电影三级在线| 97久久超碰国产精品| 亚洲精品欧美在线| 欧美三级中文字幕| 国产自产v一区二区三区c| 亚洲国产高清在线观看视频| 99久久99久久久精品齐齐| 国产精品九色蝌蚪自拍| 欧美精品久久久久久久久老牛影院| 日韩二区三区四区| 久久综合狠狠综合久久综合88|