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

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

?? remanage.cpp

?? 編譯課程設(shè)計(jì)
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// REManage.cpp: implementation of the REManage class.
//
//////////////////////////////////////////////////////////////////////
#pragma warning(disable:4786)

#include "REManage.h"
#include <iostream>
#include <fstream>
#include <algorithm>
#include <stack>
#include <windows.h>

using namespace std;
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

REManage::REManage()
{
	out.open("Result.txt");
	this->state=1;
	this->isREUpdate=false;
	this->isNFAUpdate=false;
	this->isDFAUpdate=false;
}	
REManage::REManage(string re)
{
	this->state=1;
	this->re=re;
	this->isREUpdate=true;
}	
REManage::~REManage()
{	
}
void REManage::MakeNFA_S(char input,NFA* n,vector<EDGE>& edge)
{
	EDGE e;
	if(n->start==0&&n->end==0)
	{
		e.start=n->start=state;
		e.input=input;
		e.end=n->end=++state;
		
		state++;
	}
	else
	{
		e.start=n->start;
		e.input=input;
		e.end=n->end;
	}
	
	edge.push_back(e);
}
void REManage::MakeNFA_OR(NFA* result,NFA* left,NFA* right,vector<EDGE>& edge)
{
	NFA temp;
	result->start=temp.start=state;
	temp.end=left->start;
	MakeNFA_S('@',&temp,edge);	
	
	temp.start=state;
	temp.end=right->start;
	MakeNFA_S('@',&temp,edge);
	
	temp.start=left->end;
	temp.end=++state;
	MakeNFA_S('@',&temp,edge);
	
	temp.start=right->end;
	result->end=temp.end=state;
	MakeNFA_S('@',&temp,edge);
	
	state++;
}
void REManage::MakeNFA_AND(NFA* result,NFA* left,NFA* right,vector<EDGE>& edge)
{
	result->start=left->start;
	result->end=right->end;
	
	for(int i=0;i<edge.size();i++)
	{
		if(edge[i].start==right->start)
		{
			edge[i].start=left->end;
		}
	}
}
void REManage::MakeNFA_CL(NFA* result,NFA* op,vector<EDGE>& edge)
{
	NFA temp;
	result->start=temp.start=state;
	temp.end=op->start;
	MakeNFA_S('@',&temp,edge);
	
	temp.start=op->end;
	result->end=temp.end=++state;
	MakeNFA_S('@',&temp,edge);
	
	temp.start=op->end;
	temp.end=op->start;
	MakeNFA_S('@',&temp,edge);
	
	temp.start=result->start;
	temp.end=result->end;
	MakeNFA_S('@',&temp,edge);
	
	state++;	
}
int REManage::type(char re)
{
	if(re=='*'||re=='|')
		return OP;
	else if(re!='('&&re!=')')
		return OP_D;
	else
		return -1;
}

void REManage::ProcessREToNFA()
/*
===================
輸入:
	  re
	  REInput
===================
輸出:
	  NFA_EDGE
	  NFAInput
	  startNFA
	  endNFA
===================
*/
{
	stack<char> st;			//操作符堆棧,保存處理過程中遇到的操作符
	stack<NFA> sNFA;		//NFA堆棧,保存處理過程中產(chǎn)生的NFA

	NFA nfa,temp;
	NFA result;				//臨時(shí)變量

	/**************************Process RE***********************/
	for(int i=0;i<re.length();i++)
	{
		if(re[i]=='(')
		{
			st.push(re[i]);
		}
		else if(type(re[i])==OP_D)
		{
			/************Get input of RE************/
			if(find(REInput.begin(),REInput.end(),re[i])==REInput.end())
				REInput.push_back(re[i]);	
			/******************End*******************/

			nfa.start=0;
			nfa.end=0;
			MakeNFA_S(re[i],&nfa,NFA_EDGE);

			sNFA.push(nfa);
			if(sNFA.size()>=2)
			{
				if(st.size()>0&&st.top()=='|')
				{
					st.pop();
					
					temp=sNFA.top();
					sNFA.pop();
					nfa=sNFA.top();
					sNFA.pop();
					
					MakeNFA_OR(&result,&nfa,&temp,NFA_EDGE);
					sNFA.push(result);
				}
				else if(i>0&&re[i-1]!='(')
				{
					temp=sNFA.top();
					sNFA.pop();
					nfa=sNFA.top();
					sNFA.pop();
					
					MakeNFA_AND(&result,&nfa,&temp,NFA_EDGE);
					sNFA.push(result);
				}
			}
		}
		else if(type(re[i])==OP)
		{
			if(re[i]=='*')
			{
				nfa=sNFA.top();
				sNFA.pop();
				MakeNFA_CL(&result,&nfa,NFA_EDGE);
				sNFA.push(result);
			}
			else if(re[i]=='|')
			{
				st.push(re[i]);
			}
		}
		else if(re[i]==')')
		{
			st.pop();
			if(sNFA.size()>=2)
			{	
				temp=sNFA.top();
				sNFA.pop();
				nfa=sNFA.top();
				sNFA.pop();
				
				MakeNFA_AND(&result,&nfa,&temp,NFA_EDGE);
				sNFA.push(result);
			}
		}
	}
	/*******************************End*********************************/

	/****************Get start and end state of NFA************/
	if(sNFA.size()>0)
	{
		startNFA.push_back(sNFA.top().start);
		endNFA.push_back(sNFA.top().end);

	}
	/**************************End**************************/

}

void REManage::Find_NULL_Closure(vector<int> input, 
								 vector<int>&output,
								 vector<EDGE> edge)
{
	stack<int> state;

	output.clear();

	sort(input.begin(),input.end());

	for(int i=0;i<input.size();i++)
		state.push(input[i]);
	int temp=0;

	while(state.size()>0)
	{		
		output.push_back(state.top());
		temp=state.top();
		state.pop();
		for(int j=0;j<NFA_EDGE.size();j++)
			if(edge[j].start==temp&&edge[j].input=='@')
				state.push(edge[j].end);
	}

	sort(output.begin(),output.end());
}

void REManage::Move(vector<int> input,char in,vector<int>&result,vector<EDGE> edge)
{
	vector<int> temp;
	temp.clear();
	result.clear();
	
	for(int i=0;i<input.size();i++)
	{
		for(int j=0;j<edge.size();j++)
			if(edge[j].start==input[i]&&edge[j].input==in)
				temp.push_back(edge[j].end);
	}
	
	Find_NULL_Closure(temp,result,edge);
}

void REManage::ProcessNFAToDFA()
/*
===================
輸入:
	  NFA_EDGE
	  NFAInput
	  startNFA
	  endNFA
===================
輸出:
	  startDFA
	  endDFA
	  nonEndDFA
	  DFA_EDGE
	  DFAStateGather
===================
*/
{
	EDGE edge;				//臨時(shí)變量
	vector<int> DFAState;	//臨時(shí)變量,保存某一狀態(tài)集

	//vector<int> start;		//開始狀態(tài)集,實(shí)際只有一個(gè)元素
	int	over=-1;			//標(biāo)記已處理過的狀態(tài)集


	//由NFA得到初始狀態(tài)集
	Find_NULL_Closure(startNFA, DFAState,NFA_EDGE);

	DFAStateGather.push_back(DFAState);
	startDFA=DFAStateGather.size()-1;	//得到初始狀態(tài)
	
	/*=========================add=========================*/
	for(int m=0;m<endNFA.size();m++)
	{
		if(find(DFAState.begin(),DFAState.end(),endNFA[m])!=DFAState.end())
			break;
	}
	
	if(m<endNFA.size())
		endDFA.push_back(DFAStateGather.size()-1);
	else
		nonEndDFA.push_back(DFAStateGather.size()-1);
	/*=========================add=========================*/

	/*****************Process NFA**********************/
	queue<vector<int> > tempState;
	tempState.push(DFAState);
	vector<vector<int> >::iterator iter;
	while(tempState.size()>0)
	{
		over++;

		edge.start=find(DFAStateGather.begin(),DFAStateGather.end(),
				tempState.front())-DFAStateGather.begin();

		for(int i=0;i<NFAInput.size();i++)
		{
			//求隊(duì)列首狀態(tài)集在輸入為input[i]時(shí)的結(jié)果狀態(tài)
			Move(tempState.front(),NFAInput[i],DFAState,NFA_EDGE);	
			if(DFAState.size()<1)
				break;
			//填充DFA的邊					
			edge.input=NFAInput[i];
			
			iter=find(DFAStateGather.begin(),DFAStateGather.end(),DFAState);
			
			//如果所產(chǎn)生的狀態(tài)集不在DFAStateGather中,則保存該狀態(tài)集
			if(iter==DFAStateGather.end())
			{	
				DFAStateGather.push_back(DFAState);
				
				/*=========================add=========================*/
				for(int m=0;m<endNFA.size();m++)
				{
					if(find(DFAState.begin(),DFAState.end(),endNFA[m])!=DFAState.end())
						break;
				}
				
				if(m<endNFA.size())
					endDFA.push_back(DFAStateGather.size()-1);
				else
					nonEndDFA.push_back(DFAStateGather.size()-1);
				/*=========================add=========================*/

				edge.end=DFAStateGather.size()-1;	
			}
			else
				edge.end=iter-DFAStateGather.begin();
			//保存邊
			DFA_EDGE.push_back(edge);

			if(DFAState!=tempState.front()&&edge.end>over)
				tempState.push(DFAState);
		}
		tempState.pop();
	}
	/*************************End*******************************/
}

/*消除DFA中的無用狀態(tài)*/
void REManage::RemoveFutility()
/*
===================
輸入:
	  miniStartDFA
	  miniEndDFA
      miniNonEndDFA
	  MiniDFA_EDGE
	  miniStateGather
===================
輸出:
	  miniStartDFA
	  miniEndDFA
      miniNonEndDFA
	  MiniDFA_EDGE
	  miniStateGather	  
===================
*/
{

	vector<int>	reachedState;
	queue<int>	reached;

	vector<int> startGather;
	vector<int>	endGather;

	reachedState.clear();	


	/****************Generate reached state*******************/
	reached.push(miniStartDFA);
	reachedState.push_back(miniStartDFA);

	while(reached.size()>0)
	{
		int front=reached.front();
		reached.pop();

		for(int i=0;i<MiniDFA_EDGE.size();i++)
		{
			if(find(DFAInput.begin(),DFAInput.end(),MiniDFA_EDGE[i].input)
				==DFAInput.end())
				DFAInput.push_back(MiniDFA_EDGE[i].input);

			if(MiniDFA_EDGE[i].start==front)
			{
				if(find(reachedState.begin(),reachedState.end(),MiniDFA_EDGE[i].end)
					==reachedState.end())
				{
					reachedState.push_back(MiniDFA_EDGE[i].end);
					reached.push(MiniDFA_EDGE[i].end);
				}
			}
		}
	}
	sort(reachedState.begin(),reachedState.end());
	/*****************************end******************************/

	/****************Update the edge of DFA*******************/
	vector<EDGE>::iterator iterEDGE;
	
	for(int i=0;i<MiniDFA_EDGE.size();i++)
	{
		if(find(reachedState.begin(),reachedState.end(),MiniDFA_EDGE[i].start)
			==reachedState.end())
		{
			iterEDGE=MiniDFA_EDGE.begin()+i;
			MiniDFA_EDGE.erase(iterEDGE++);
			i--;
		}
	}
	/*****************************end******************************/

	/****************Update the end state of DFA*******************/
	vector<int>::iterator iterEnd;
	for(i=0;i<miniEndDFA.size();i++)
	{
		if(find(reachedState.begin(),reachedState.end(),miniEndDFA[i])
			==reachedState.end())
		{
			iterEnd=miniEndDFA.begin()+i;
			miniEndDFA.erase(iterEnd++);
			i--;
		}
	}
	/*****************************end******************************/
	
	/******************remove not end state************************/	
	int initSize=reachedState.size()+1;

	while(reachedState.size()<initSize)
	{
		initSize=reachedState.size();

		startGather.clear();
		endGather.clear();

		for(int m=0;m<MiniDFA_EDGE.size();m++)
		{
			if(find(startGather.begin(),startGather.end(),MiniDFA_EDGE[m].start)
				==startGather.end())
				startGather.push_back(MiniDFA_EDGE[m].start);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美视频在线观看| 久久精工是国产品牌吗| 中文字幕不卡在线播放| 精品视频在线视频| 99re这里只有精品6| 国产麻豆视频一区二区| 亚洲第一综合色| 国产精品美女久久久久久久网站| 欧美日本一区二区| 欧洲精品一区二区| 欧美性大战久久久| 色综合色综合色综合色综合色综合 | 中文字幕一区二区5566日韩| 日韩欧美中文字幕一区| 制服丝袜中文字幕亚洲| av爱爱亚洲一区| 91精品福利视频| 99国产精品一区| 色一情一伦一子一伦一区| 国产福利电影一区二区三区| 久久国产精品免费| 日日摸夜夜添夜夜添精品视频 | 国内一区二区视频| 九九精品一区二区| 激情六月婷婷久久| 日本中文字幕一区二区有限公司| 亚洲综合免费观看高清完整版在线 | 高清国产一区二区| 国产成人鲁色资源国产91色综| 国产河南妇女毛片精品久久久| 亚洲18色成人| caoporm超碰国产精品| 污片在线观看一区二区| 经典一区二区三区| 欧美体内she精高潮| 免费欧美在线视频| 日本成人中文字幕| 秋霞av亚洲一区二区三| 国产精品77777竹菊影视小说| 国产九色精品成人porny| 国产一区二区视频在线播放| 成人免费看黄yyy456| 国内成人精品2018免费看| 国产一区二区精品久久91| 日本在线播放一区二区三区| 精品国产乱码久久久久久夜甘婷婷| 欧美日韩一区国产| 久久久99精品免费观看不卡| 26uuu国产日韩综合| 国产清纯美女被跳蛋高潮一区二区久久w | 奇米一区二区三区av| 日韩一区二区三区av| 欧美一级一区二区| 国产精品久久久久久久久图文区| 欧美视频一区二区| 91免费看`日韩一区二区| 91麻豆免费观看| 欧美性色综合网| 亚洲精品在线电影| 国产精品国产三级国产有无不卡 | 在线不卡中文字幕| 日韩中文字幕区一区有砖一区| 奇米色一区二区| 欧美四级电影网| 欧美视频完全免费看| 色激情天天射综合网| 91福利资源站| 欧美精品丝袜中出| 色八戒一区二区三区| 在线精品视频小说1| 欧美岛国在线观看| 亚洲色图视频网站| 亚洲欧美欧美一区二区三区| 91.com视频| 日韩欧美精品三级| 国产.欧美.日韩| 豆国产96在线|亚洲| 国产精品一卡二卡| 丁香婷婷深情五月亚洲| 久久99国内精品| 麻豆精品在线看| 国产成人高清视频| 国产日韩欧美麻豆| 中文字幕一区二区视频| 美腿丝袜亚洲一区| 日韩成人av影视| 粉嫩在线一区二区三区视频| 亚洲欧洲综合另类| 国产日韩v精品一区二区| 亚洲国产精品二十页| 亚洲成人精品影院| 国产高清在线精品| 久久精品理论片| 91在线观看污| 国产一区二区三区在线看麻豆| 国产在线视频一区二区| 91年精品国产| 欧美色综合网站| 精品国产乱码久久久久久久 | 欧美性大战xxxxx久久久| 中文字幕一区二区三区视频| 日韩免费高清视频| 亚洲精品成人少妇| 亚洲欧洲无码一区二区三区| 欧美激情在线看| 亚洲mv在线观看| 久久99精品久久久久婷婷| 欧亚洲嫩模精品一区三区| 99久久精品国产导航| 成人免费看黄yyy456| 久久99精品视频| 色又黄又爽网站www久久| 91精品在线一区二区| 欧美国产精品一区二区| 亚洲国产一区二区视频| 成人一道本在线| 制服视频三区第一页精品| 精品sm在线观看| 国产精品国产三级国产| 日韩高清欧美激情| 懂色av一区二区夜夜嗨| 色爱区综合激月婷婷| 精品国精品国产| 亚洲第四色夜色| 一区二区在线观看免费| 91网站最新地址| 国产日韩欧美一区二区三区乱码| 日韩一区二区三区在线| 亚洲午夜电影网| 26uuu亚洲婷婷狠狠天堂| 中文字幕电影一区| 国产剧情在线观看一区二区| av在线一区二区| 粗大黑人巨茎大战欧美成人| 中文字幕在线不卡视频| 国产91在线观看| 7777精品伊人久久久大香线蕉完整版 | 日韩美女天天操| 26uuu亚洲婷婷狠狠天堂| 蜜臀av一区二区在线免费观看| 麻豆视频一区二区| 99久久精品费精品国产一区二区| 欧美成人精品二区三区99精品| 免费高清成人在线| 欧美精品一区二区在线播放| 国产一区在线观看麻豆| 亚洲欧洲一区二区在线播放| 色美美综合视频| 日韩综合小视频| 国产欧美一区二区精品忘忧草 | 日韩电影在线看| 精品国产一区二区三区忘忧草| 成人一区二区视频| 亚洲色图在线视频| 欧美三片在线视频观看 | 欧美怡红院视频| 日本不卡中文字幕| 精品久久一二三区| 99精品视频在线免费观看| 亚洲精品美国一| 在线精品视频一区二区三四| 亚洲一区在线观看免费观看电影高清| 69久久99精品久久久久婷婷| 国精产品一区一区三区mba视频 | 免费日本视频一区| 色吧成人激情小说| 欧美亚洲动漫制服丝袜| 亚洲美女视频在线| 99re免费视频精品全部| 蜜臀久久99精品久久久久久9 | 国产精品久久久久婷婷| 欧洲视频一区二区| 国产成人欧美日韩在线电影| 欧美无砖砖区免费| 91精品中文字幕一区二区三区| 欧美激情一区二区三区在线| 亚洲欧美另类在线| 免费观看在线综合| 美美哒免费高清在线观看视频一区二区| 亚洲欧美乱综合| 日韩电影免费一区| 国产一区二区0| 97精品久久久午夜一区二区三区| 99久久99精品久久久久久| 日韩欧美中文字幕一区| 日韩精品国产精品| 色哟哟一区二区三区| 国产精品欧美综合在线| 日韩精品一区二区三区四区 | 亚洲视频免费在线| 粉嫩av一区二区三区在线播放| 69精品人人人人| 日韩国产欧美在线观看| 高潮精品一区videoshd| 亚洲成人在线观看视频| 亚洲成av人影院在线观看网| 亚洲精品乱码久久久久久黑人| 一区二区三区精密机械公司| 精品免费一区二区三区| av电影在线观看一区|