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

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

?? 構造分析表.cpp

?? 構造LL(1)分析表
?? CPP
字號:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cctype>
#include<iomanip>
using std::setw;
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::right;
//using std::left;
const int count=10;//記錄產生式 的最大條數
const int size=20; //每條產生式 的最大長度
int pos=0;         //指示空字符的位置
int num=0;          //記錄當前輸入文法的產生式條數
string gene[count];//保存輸入的產生式
string vt;          //保存終結符
string left;         //保存非終結符
int first[count][size]; //記錄first表的值
int follow[count][size];//記錄follow表的值
//設置first表的值
void ff(const string &str,int n)
{
	size_t start=2;
	size_t index=0;
	size_t count1=0;
	do
	{
		start++;
		//如果該條產生式是以終結符開頭
		if(!isupper(str[start]))
		{//將該終結符添加到對應的first中
			index=vt.find(str[start]);
			first[n][index]=count1;
			count1++;
		}
		else
		{
			size_t s=start;
			int m;
			//是以非終結符開頭
			do
			{
				m=count-1;	
				while(m>=0&&str[s]!=gene[m][0])m--;//找到該非終結符對應的索引號
				if(first[m][0]==-1)//如果沒查找過m條產生式的first則查找
				{
					ff(gene[m],m);
				}
				for(int i=1;i<size;i++)//將該非終結符的first/^添加到當前產生式的first中
				{
					if(first[m][i]!=-1&&i!=pos)
						first[n][i]=count1;
				}
				s++;
				//若該終結符包含空字^且后接非終結符
			}while(first[m][pos]!=-1&&isupper(str[s]));
			if(first[m][pos]!=-1&&str[s]=='|')//如果前面的非終結符都包含^且后面沒有字符
				first[n][pos]=count1;          //將^包含到當前產生式的first中
			else if(first[m][pos]!=-1&&!isupper(str[s]))//如果前面的非終結符都包含^且后面接終結符
				first[n][vt.find(str[s])]=count1;//將該終結符添到first中
			count1++;
		}
		start=str.find_first_of('|',start);
	}while(start!=string::npos);
	first[n][0]=1;
}
void ll(const char ch)
{
	
	int m=num-1;
	while(m>=0&&gene[m][0]!=ch)m--;//m確定ch所在gene的索引
	follow[m][0]=1;
	if(m<0)return ;
	for(int i=0;i<num;i++)//檢查每條產生式的右部
	{
		
		size_t j=3;
		size_t index=0;
		size_t cc=0;
		while(1)
		{
			
			size_t dex=gene[i].find_first_of(ch,j);//找到i條產生式右部出現ch的位置
			if(dex==string::npos)break ;//沒找到ch則找下一條產生式
			dex++;
			//cout<<gene[i][dex]<<endl;
			//getchar();
			if(dex==gene[i].length())//如果ch位于該條產生式的末尾
			{
				if(follow[i][0]==-1)
				{
					ll(gene[i][0]);
				}
				for(int l=1;l<size;l++)//將該條產生式左部所對應的follow加到m的follow中
					if(follow[i][l]!=-1)
						follow[m][l]=1;
					break;                   //檢查下一條
			}
			//如果是終結符
			else if(cc=vt.find(gene[i][dex]),cc!=string::npos&&cc!=pos)
			{
				follow[m][cc]=1;
			}
			//如果是非終結符
			else if(cc=left.find(gene[i][dex]),cc!=string::npos)
			{	
				int kk;
				do
				{
					kk=num-1;
					//cout<<"i="<<i<<" dex="<<dex<<' ';
					//cout<<"gene[i][dex]="<<gene[i][dex]<<endl;
					while(kk>=0&&gene[kk][0]!=gene[i][dex])kk--;
					//把該非終結符所對應的first/^加到follow中
					if(kk<0)break;
					for(int ii=1;ii<size;ii++)
					{
						if(first[kk][ii]!=-1&&ii!=pos)
						{
							follow[m][ii]=1;
						}
					}
					dex++;
					if(dex==gene[i].length())break;
					//getchar();
					//cout<<"kk="<<kk<<' ';
					//cout<<"first[kk][pos]="<<first[kk][pos]<<endl;
					
					//如果該非終結符的first包含^且后面是非終結符,繼續循環
				}while(first[kk][pos]!=-1&&left.find(gene[i][dex])!=string::npos);
				//如果前面的非終結符都可推出^且已達本條產生式的末尾
				if(first[kk][pos]!=-1&&dex==gene[i].length())
				{
					if(follow[i][0]==-1)
					{
						ll(gene[i][0]);
					}
					for(int l=1;l<size;l++)//將該條產生式左部所對應的follow加到m的follow中
						if(follow[i][l]!=-1)
							follow[m][l]=1;
						break;
				}
				//如果前面的非終結符都可推出^且后面是|
				else if(first[kk][pos]!=-1&&gene[i][dex]=='|')
				{
					if(follow[i][0]==-1)
					{
						ll(gene[i][0]);
					}
					for(int l=1;l<size;l++)//將該條產生式左部所對應的follow加到m的follow中
						if(follow[i][l]!=-1)
							follow[m][l]=1;
						
				}
				//如果前面的非終結符都可推出^且當前為終結符
				else if(first[kk][pos]!=-1&&vt.find(gene[i][dex])!=string::npos&&vt.find(gene[i][dex])!=pos)
				{
					follow[m][vt.find(gene[i][dex])]=1;
				}
				
			}
			j=dex+1;
		}
	}
	
}
void foutputtable()
{
	int first1[count][size];
	for(int  i=0;i<count;i++)
		for(int j=0;j<size;j++)
			first1[i][j]=first[i][j];
		for( i=0;i<num;i++)
		{
			if(first1[i][pos]!=-1)
			{
				for(int j=0;j<size;j++)
					if(follow[i][j]!=-1)
						first1[i][j]=-2;
			}
		}
		cout<<"預測分析表的內容為:"<<endl;
		cout<<"        ";
		for(i=1;i<vt.length();i++)
			if(i!=pos)
				cout<<vt[i]<<"       ";
			cout<<endl;
			for( i=0;i<num;i++)
			{
				cout<<gene[i][0]<<"       ";
				for(int j=1;j<size;j++)
				{
					if(j==pos)continue;
					if(first1[i][j]!=-1)
					{
						if(first1[i][j]==-2)
						{
							cout<<gene[i][0]<<"->^"<<"    ";
						}
						else
						{
							int c=first1[i][j];
							size_t start=3;
							size_t end=0;
							c++;
							string tt;
							while(c--)
							{
								end=gene[i].find_first_of('|',start+1);
								if(end==string::npos)end=gene[i].length();
								tt=gene[i].substr(start,end-start);
								start=end+1;
							}
							cout<<gene[i][0]<<"->"<<tt;
							for(int k=0;k<(8-tt.length()-3);k++)cout<<' ';
						}
						//cout<<setw(8-tt.length()-3);
					}
					else
					{
						cout<<"        ";
					}
					
				}
				cout<<endl;
			}
			
}
void foutput()
{
	cout<<"first表的內容為:"<<endl;
	for(int i=0;i<num;i++)
	{
		cout<<gene[i][0]<<"        ";
		for(int j=1;j<size;j++)
		{
			if(first[i][j]!=-1)
				cout<<vt[j]<<' ';
		}
		cout<<endl;
	}
}
void loutput()
{
	cout<<"follow表的內容為:"<<endl;
	for(int i=0;i<num;i++)
	{
		cout<<gene[i][0]<<"        ";
		for(int j=1;j<count;j++)
		{
			if(follow[i][j]!=-1)
				cout<<vt[j]<<' ';
		}
		cout<<endl;
	}
	
}
int main(int argc,char * argv[])
{
	
	int i=0,j=0;
	for(;i<count;i++)
		for(j=0;j<size;j++)
		{
			first[i][j]=-1;
			follow[i][j]=-1;
		}
		cout<<"請輸入文法的條數:";
		
		cin>>num;
		cout<<"請輸入文法:"<<endl;
		for(i=0;i<num;i++)
			cin>>gene[i];
		//for(i=0;i<num;i++)	cout<<endl<<gene[i]<<endl;
		
		for(i=0;i<count;i++)
		{
			left+=gene[i][0];
		}
		//cout<<"left="<<left<<endl;
		size_t index=0;
		vt+='@';
		for(i=0;i<num;i++)
		{
			index=2;
			while(index!=string::npos)
			{
				index++;
				index=gene[i].find_first_not_of(left,index);
				if(index==string::npos)break;
				if(gene[i][index]=='|'||vt.find(gene[i][index])!=string::npos)continue;
				vt+=gene[i][index];
			}
		}
		vt+='#';
		follow[0][vt.find('#')]=1;
		pos=vt.find('^');
		//cout<<"pos="<<pos<<endl;
		//cout<<"vt="<<vt<<endl;
		for(i=0;i<num;i++)
		{
			if(first[i][0]==-1)
			{
				ff(gene[i],i);
			}
		}
		foutput();
		
		for(i=0;i<num;i++)
		{
			if(follow[i][0]==-1)
				ll(gene[i][0]);
		}
		loutput();
		foutputtable();	
		return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合欧美在线| 国产成人超碰人人澡人人澡| 九九九精品视频| 波多野洁衣一区| 精品乱人伦小说| 亚洲伊人色欲综合网| 国产精品一区三区| 欧美一区国产二区| 一区二区三区成人| 国产精品18久久久久久久久| 91精品国产免费久久综合| 中文字幕一区免费在线观看| 美日韩一区二区| www.av精品| 国产蜜臀av在线一区二区三区| 亚洲成人黄色小说| 在线观看www91| 亚洲毛片av在线| av资源网一区| 欧美高清在线一区二区| 激情综合五月天| 精品少妇一区二区三区在线播放 | 91高清视频免费看| 国产欧美一区在线| 国产精品亚洲成人| 欧美精品一区二区精品网| 日韩国产在线一| 欧美日韩国产美女| 亚洲成人av在线电影| 欧美三级一区二区| 午夜不卡在线视频| 7777精品伊人久久久大香线蕉完整版| 一区二区在线观看视频 | 亚洲欧美偷拍三级| 99久久99久久综合| 一区二区三区中文免费| 日本韩国一区二区三区| 亚洲大片免费看| 欧美日韩成人一区| 久久国产精品99久久久久久老狼| 欧美一区二区视频在线观看2022 | 亚洲图片一区二区| 91久久精品一区二区二区| 亚洲一区二区三区小说| 欧美三级乱人伦电影| 日韩激情视频在线观看| 精品国一区二区三区| 国产九九视频一区二区三区| 欧美国产一区视频在线观看| 国产成人精品免费| 综合久久国产九一剧情麻豆| 色综合视频在线观看| 亚洲国产综合色| 欧美一级国产精品| 国产精品一区二区三区四区| 中文字幕中文乱码欧美一区二区| 91免费视频网| 日本特黄久久久高潮| 久久久美女毛片| 91麻豆国产在线观看| 午夜视频在线观看一区二区| 日韩欧美的一区二区| 成人午夜伦理影院| 亚洲一区二区高清| 久久先锋资源网| 色av一区二区| 韩日av一区二区| 亚洲综合免费观看高清完整版| 欧美一区二区三区视频在线 | 91精品国产综合久久精品麻豆| 国产乱淫av一区二区三区| 亚洲免费观看高清完整版在线观看 | 欧美精品一区二区不卡| 在线观看免费视频综合| 九色综合国产一区二区三区| 国产精品久久久久久久久果冻传媒| 欧美中文字幕一区| 国产福利一区二区三区视频| 伊人色综合久久天天人手人婷| 欧美xxxxx裸体时装秀| 99精品热视频| 国产一区二区不卡| 亚洲成人av在线电影| 国产精品久久久一区麻豆最新章节| 制服丝袜亚洲精品中文字幕| 成人夜色视频网站在线观看| 日韩精品一卡二卡三卡四卡无卡| 国产精品精品国产色婷婷| 欧美zozo另类异族| 欧美日韩国产一二三| 91麻豆国产自产在线观看| 国产一区二区三区不卡在线观看| 亚洲成精国产精品女| 中文字幕一区二区视频| 久久先锋资源网| 日韩一区二区三区电影在线观看 | 欧美mv日韩mv国产网站app| 欧美无砖砖区免费| 欧洲精品中文字幕| k8久久久一区二区三区| 韩国三级在线一区| 蜜桃精品视频在线| 日本美女一区二区| 首页欧美精品中文字幕| 一区二区三区日韩精品| 亚洲免费观看在线视频| 亚洲麻豆国产自偷在线| 国产精品久久国产精麻豆99网站| 国产日韩综合av| 欧美高清在线视频| 国产精品情趣视频| 综合色天天鬼久久鬼色| ●精品国产综合乱码久久久久| 国产精品私房写真福利视频| 久久九九国产精品| 日本一区二区免费在线 | 亚洲bdsm女犯bdsm网站| 一区二区三区小说| 亚洲午夜精品一区二区三区他趣| 一区二区三区成人在线视频| 亚洲国产成人va在线观看天堂| 亚洲精品一二三| 亚洲第一会所有码转帖| 喷白浆一区二区| 国产精品一区二区三区网站| 国产精品影视在线观看| 成人丝袜高跟foot| 91国偷自产一区二区开放时间| 日本精品视频一区二区三区| 欧美日韩国产一区| 精品三级在线看| 欧美国产禁国产网站cc| 亚洲美女在线国产| 亚洲第一精品在线| 久久99精品久久久久久动态图| 国产成人免费av在线| 91在线视频观看| 在线电影欧美成精品| 久久精品无码一区二区三区| 亚洲人成电影网站色mp4| 亚洲五码中文字幕| 黄网站免费久久| 99久久精品国产导航| 91精品午夜视频| 欧美激情中文字幕| 亚洲国产精品自拍| 国产美女在线精品| 在线观看亚洲专区| 精品久久99ma| 亚洲色欲色欲www在线观看| 日韩在线一区二区三区| 高清不卡在线观看av| 欧美在线一二三四区| 精品国精品自拍自在线| 亚洲激情在线播放| 久久99久久99小草精品免视看| 97se亚洲国产综合自在线 | 久久国产精品区| 色域天天综合网| 精品国产百合女同互慰| 亚洲色图欧美激情| 国产精品影视天天线| 欧美精品少妇一区二区三区| 国产嫩草影院久久久久| 免费在线欧美视频| 在线看国产日韩| 国产日韩欧美一区二区三区乱码 | 日韩久久久久久| 亚洲精品伦理在线| 成人激情黄色小说| 精品国产伦一区二区三区观看体验| 亚洲免费观看视频| 成人avav影音| 亚洲欧洲三级电影| 国产综合色精品一区二区三区| 在线精品视频一区二区三四 | 久久免费电影网| 日本欧美久久久久免费播放网| 91捆绑美女网站| 国产精品网站在线播放| 国产一区中文字幕| 日韩欧美综合一区| 午夜精品aaa| 91福利在线导航| 亚洲色图20p| 91在线无精精品入口| 国产欧美一区二区三区网站| 美女网站色91| 欧美一区二区三区视频免费播放| 一区二区三区精品在线| 99精品视频在线免费观看| 国产日产欧美精品一区二区三区| 经典三级在线一区| 欧美成va人片在线观看| 麻豆中文一区二区| 欧美成人精品福利| 久久99精品国产| 久久精品一区二区| 成人小视频在线| 亚洲欧美日韩国产一区二区三区|