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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dn轉(zhuǎn)換.cpp

?? 編譯原理 :預(yù)測(cè)分析
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):


#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<ctype.h>
#include<process.h>
#include<bitset>
#include<vector>
using namespace std;

//邊結(jié)點(diǎn)
typedef struct Node{
	int verIndex;
	char st[100];
	struct Node* nextArc;
}Edge;

//狀態(tài)節(jié)點(diǎn)類(lèi)型
#define START_NODE 1
#define END_NODE 2
#define NORMAL_NODE 3

//狀態(tài)結(jié)點(diǎn)
typedef struct{
	char ver;
	int type;
	Edge* firstArc;
}Vertex;

//最大的頂點(diǎn)數(shù)
#define MAX_VERTEX_NUM 100

//最大的字母數(shù)
#define MAX_LETTER_NUM 400

#define MAX_TALBE_SIZE 100

typedef bitset<MAX_VERTEX_NUM> VertexSet;

//圖類(lèi)型
typedef struct{
	Vertex vertexs[MAX_VERTEX_NUM];
	int vertexNum;

	char alphaBeta[MAX_LETTER_NUM];
	int letterNum;
	char st[400]; //存放輸入的正則表達(dá)式
	
	//產(chǎn)生狀態(tài)集合表
	VertexSet table[MAX_TALBE_SIZE];
	int row;  //表的行數(shù)
	char charTable[MAX_TALBE_SIZE];
	bool isEnd[MAX_TALBE_SIZE]; //記錄表中每行首結(jié)點(diǎn)是否為終結(jié)點(diǎn)
}Graph;

//初始化圖
void Init(Graph* G){
	for(int i = 0 ; i < MAX_VERTEX_NUM;i++)
		G->vertexs[i].firstArc = NULL;
	G->vertexNum = 0;

}

//返回圖中第i個(gè)結(jié)點(diǎn)字符
char LocateVer(Graph* G,int i){
	if(i <0 || i>=G->vertexNum) return '\0';
	return G->vertexs[i].ver;
}

//圖搜索時(shí)的訪問(wèn)標(biāo)志
#define VISITED 1
#define NONVISITED 0
//訪問(wèn)標(biāo)志數(shù)組
int visited[MAX_VERTEX_NUM];

//深度優(yōu)先輸出
void DFS(Graph* G,int startVer){
	visited[startVer] = VISITED;
	Edge* p;
	p = G->vertexs[startVer].firstArc;
	while(p != NULL){
		if(!visited[p->verIndex]){
			printf("%c --->\" %s \" ---->%c\n",
				LocateVer(G,startVer),p->st,LocateVer(G,p->verIndex));
			DFS(G,p->verIndex);
		}
		p = p->nextArc;
	}
}

//深度優(yōu)先搜索
void DFS_output(Graph* G){
	for(int i = 0 ; i < G->vertexNum;i++)
		visited[i] = NONVISITED;
	for(i = 0 ; i< G->vertexNum;i++)
		if(!visited[i]) DFS(G,i);
}

//按頂點(diǎn)順序打印圖中每一條邊
void printGraph(Graph* G){
	printf("\n\n1. 轉(zhuǎn)換成NFA如下 \n");
	for(int i = 0; i < G->vertexNum;i++){
		Edge* p = G->vertexs[i].firstArc;
		while(p != NULL){
			printf("%c --->\" %s \" ---->%c\n",
				LocateVer(G,i),p->st,LocateVer(G,p->verIndex));
			p = p->nextArc;
		}
	}
	printf("\n\n\n");

}

//向圖中位置pos處,插入一個(gè)名稱(chēng)為c,類(lèi)型為type的頂點(diǎn)
void InsertVertext(Graph* G,int pos,char c,int type){
	if(pos < 0 || pos > G->vertexNum) {
		printf("****** 插入位置不合法! ***********\n");
		return;
	}
	if(G->vertexNum == MAX_VERTEX_NUM){
		printf("****** 圖中節(jié)點(diǎn)數(shù)已達(dá)到最大值,無(wú)法插入! *********\n");
		return;
	}

	for(int i = 0 ; i < G->vertexNum;i++){
		Edge* p = G->vertexs[i].firstArc;
		while(p != NULL){
			if(p->verIndex >= pos) p->verIndex ++;
			p = p->nextArc;
		}
	}

	G->vertexNum++;
	for(i = G->vertexNum; i >pos ;i--)
		G->vertexs[i] = G->vertexs[i-1];
	G->vertexs[pos].firstArc = NULL;
	G->vertexs[pos].ver = c;
	G->vertexs[pos].type = type;
}

//輸出狀態(tài)集合set
void outputSet(Graph* G,VertexSet set){
	printf("{");
	for(int i = 0 ; i < G->vertexNum;i++)
		if(set.test(i)) printf(" %c ",LocateVer(G,i));
	printf("}");
}

//用深度優(yōu)先搜索返回 ver 的ε閉包
VertexSet CloserDFS(Graph* G,int ver){
	VertexSet result;
	Edge* p = G->vertexs[ver].firstArc;
	visited[ver] = VISITED;
	result.set(ver);
	while(p != NULL){
		if(strcmp(p->st,"ε") == 0){			
			if(!visited[p->verIndex]) 
				result |= CloserDFS(G,p->verIndex);
		}
		p = p->nextArc;
	}
	return result;
}

//返回頂點(diǎn)ver的ε閉包
VertexSet Closer(Graph* G,int ver){
	for(int i = 0 ; i < G->vertexNum;i++)
		visited[i] = NONVISITED;
    return CloserDFS(G,ver);	 
}

//返回圖G中頂點(diǎn)集合s通過(guò)一次ch弧所能到達(dá)的頂點(diǎn)集
VertexSet SetThrough(Graph* G,const VertexSet& s,char ch){
	VertexSet result;
	for(int i = 0 ; i < G->vertexNum;i++){
		if(s.test(i)) {
			Edge* p = G->vertexs[i].firstArc;
			while(p != NULL){
				if(p->st[0] == ch)
					result.set(p->verIndex);
				p = p->nextArc;
			}
		}
	}
	return result;
}

//集合b關(guān)于字符ch的Ich閉包
VertexSet Move(Graph* G,VertexSet& b,char ch){
	VertexSet  result;

	//存放G中每個(gè)狀態(tài)的?閉包
	vector<VertexSet> v(G->vertexNum,result);
	for(int i = 0 ; i < G->vertexNum;i++)
		v[i] = Closer(G,i);
	
	result = SetThrough(G,b,ch);
	VertexSet tmpSet;
	for( i = 0 ; i < G->vertexNum;i++)
		if(result.test(i)) tmpSet |= v[i];
	result |= tmpSet;

	return result;
}

//輸出圖G的狀態(tài)表
void outputStatesTable(Graph* G){
	int col = G->letterNum + 1;
	for(int i = 0; i < G->row ; i++){
		for(int j = 0 ; j < col;j++){
			int index = i * col + j;
			outputSet(G,G->table[index]);
			printf("\t");
		}
		printf("\n");
	}
}

//建圖的DFA狀態(tài)表
void BuildSituTable(Graph* G){
	int col = G->letterNum + 1;
	int row = 0;
	int k = 0;
	G->table[0] = Closer(G,0);
	while(1){
		//處理一行
		G->table[row*col] = G->table[k];
		for(int i = 1; i < col;i++)
			G->table[row*col + i] = Move(G,G->table[k],G->alphaBeta[i-1]);
		row++;

		//判斷是否要結(jié)束
		int next = k;
		bool find = false;
		for(int j = k + 1; j < row*col && !find; j++){
			if(G->table[j].count() == 0) continue;
			for(int m = 0; m < row ; m++)
				if(G->table[m*col] == G->table[j]) break;
			if(m == row) find = true;
		}
		if(!find) break;
		k = j - 1;
	}
	G->row = row;
}

//去掉字符串中的空格
void Trim(char st[]){
	for(int i = 0 ; st[i];)
		if(isspace(st[i])){
			for(int j = i;st[j];j++)
				st[j] = st[j+1];
		}
		else i++;
}

//去掉字符串最外層多余的括號(hào)
void DeleteBrackets(char st[]){
	int a = 0;
	int b = strlen(st) - 1;
	int k = 0;

	while(st[0] == '('){
		int k = 1;
		for(int i = 1 ; st[i] && k != 0; i++){
			if(st[i] == '(') k++;
			if(st[i] == ')') k--;
		}
		if(st[i-1] != ')' || st[i] != '\0') break;
		st[i - 1] = '\0';
		strcpy(st,st+1);
	}
}

//判斷頂點(diǎn)下標(biāo)是否合法
bool isLegal(Graph* G,int ver){
	return ver>=0 && ver< G->vertexNum;
}

//在圖中添加一條 ver-->toVer的邊
void AddEdge(Graph* G,int ver,int toVer,char st[]){
	if(!isLegal(G,ver) || !isLegal(G,toVer)){
		printf("***** (%d-->%d) 頂點(diǎn)下標(biāo)越界! **********\n",ver,toVer);
		return;
	}


	Edge* p = (Edge*)malloc(sizeof(Edge));
	strcpy(p->st,st);
	p->verIndex = toVer;
	p->nextArc = G->vertexs[ver].firstArc;
	G->vertexs[ver].firstArc = p;
}

//在圖中刪除一條邊
void DeleteEdge(Graph* G,int pos,Edge* p){
	if(!isLegal(G,pos)) {
		printf("***** (%d) 頂點(diǎn)下標(biāo)越界! **********\n",pos);
		return;
	}
	
	if(G->vertexs[pos].firstArc == NULL) return;
	if(G->vertexs[pos].firstArc == p){
		G->vertexs[pos].firstArc = p->nextArc;
	}
	else{
		for(Edge* q = G->vertexs[pos].firstArc;q->nextArc != NULL && q->nextArc != p;q = q->nextArc);
		if(q->nextArc != NULL) q->nextArc = p->nextArc;
		else {
			printf("**** 沒(méi)有找到要?jiǎng)h除的邊! *****\n");
			return;
		}
	}
	free(p);
}

//分解字符串
char DivideStr(char st[],char firstSt[],char secondSt[]){
	int FI = 0;
	int k = 0;

	DeleteBrackets(st);
	if(isalnum(st[k])){
		while(isalnum(st[k])){
			firstSt[FI++] = st[k++];
		}
	}
	else if(st[0] == '('){				//n用來(lái)表示括號(hào)是否匹配
		int n = 1;
		firstSt[FI++] = '(';
		for(k = 1;n != 0; k++){
			if(st[k] == '(') n++;
			else if(st[k] == ')') n--;
			firstSt[FI++] = st[k];
		}
	}
	else{
		printf("******  %s 非法開(kāi)頭字符 %c ***********\n",st,st[k]);
		return '!';
	}

	if(st[k] == '\0'){
		firstSt[0] = st[0];
		firstSt[1] = '\0';
		strcpy(secondSt,st+1);
		return '+';
	}

	if(st[k] == '*' ){
		k++;		
		if(st[k] == '\0'){
			firstSt[FI] = '\0';
			if(firstSt[FI - 1] == ')'){
				firstSt[--FI] = '\0';
				strcpy(firstSt,firstSt+1);
			}
			secondSt[0] = '\0';
			return '*';

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99在线观看| 色综合久久88色综合天天6 | 久久精品国产**网站演员| 亚洲国产视频一区二区| 樱花影视一区二区| 中文在线一区二区| 亚洲国产成人午夜在线一区| 久久青草欧美一区二区三区| 日韩欧美国产一二三区| 欧美一区二区三区性视频| 欧美高清性hdvideosex| 欧美一区午夜视频在线观看| 9191成人精品久久| 日韩精品一区二区三区视频| 日韩美女天天操| 久久综合色天天久久综合图片| 日韩美女主播在线视频一区二区三区| 91精品国产高清一区二区三区 | 天天综合日日夜夜精品| 舔着乳尖日韩一区| 韩国av一区二区| 国产精品自拍网站| 成人av午夜电影| 色呦呦日韩精品| 欧美日韩一区国产| 精品日产卡一卡二卡麻豆| 国产日韩精品视频一区| 国产精品美女一区二区| 亚洲国产中文字幕| 蜜桃在线一区二区三区| 激情综合色丁香一区二区| 成人免费视频一区二区| 日本丶国产丶欧美色综合| 9191久久久久久久久久久| 久久久噜噜噜久久人人看| 1000精品久久久久久久久| 亚洲高清久久久| 国产制服丝袜一区| 色综合久久久久综合体| 日韩一区二区在线看| 久久久久久久久99精品| 国产精品久久久久久久久动漫| 亚洲在线成人精品| 亚洲最快最全在线视频| 视频在线在亚洲| 久久99热国产| 狠狠色伊人亚洲综合成人| 99久久久国产精品| 欧美久久久久久久久久| 精品免费视频.| 中文一区在线播放| 亚洲国产人成综合网站| 亚洲国产精品尤物yw在线观看| 久久99精品久久久久久| 波多野洁衣一区| 欧美日韩免费高清一区色橹橹 | 日韩欧美在线123| 久久久精品人体av艺术| 欧美韩国一区二区| 亚洲成av人**亚洲成av**| 久久er99精品| 欧美视频在线一区| 精品三级在线观看| 亚洲人成7777| 日韩精品免费专区| voyeur盗摄精品| 欧美日韩精品电影| 精品国产免费一区二区三区香蕉| 亚洲欧美偷拍三级| 久久99久久99精品免视看婷婷| 播五月开心婷婷综合| 欧美日韩国产色站一区二区三区| 久久久久久夜精品精品免费| 亚洲精选免费视频| 午夜精品免费在线| 91老司机福利 在线| 欧美一卡二卡在线观看| 亚洲欧洲日产国码二区| 日本午夜一本久久久综合| 国产jizzjizz一区二区| 欧美丝袜第三区| 中文字幕一区免费在线观看| 蜜臀av性久久久久蜜臀av麻豆| 99久久99久久精品免费看蜜桃| 91精品欧美福利在线观看| 亚洲欧洲美洲综合色网| 亚洲国产精品一区二区久久 | 欧美一级精品大片| 亚洲色图视频网| 国产美女久久久久| 91精品国产高清一区二区三区蜜臀| 亚洲精品美国一| 国产成人午夜视频| 欧美一级二级在线观看| 国产精品国模大尺度视频| 国模套图日韩精品一区二区| 欧美性xxxxxxxx| 中文字幕日韩一区| 国产麻豆91精品| 色综合久久天天| 亚洲乱码国产乱码精品精的特点| 国产乱码字幕精品高清av| 欧美一区二区三区视频免费 | 欧美喷潮久久久xxxxx| 亚洲精品福利视频网站| 国产综合色视频| 久久奇米777| 国产中文一区二区三区| 欧美不卡激情三级在线观看| 丝袜脚交一区二区| 欧美日韩午夜在线视频| 亚洲精品一二三| 91影视在线播放| **性色生活片久久毛片| 91无套直看片红桃| 亚洲视频免费看| 国产精品18久久久久久久久久久久 | 午夜精品视频一区| 欧美午夜寂寞影院| 一区二区三区免费| 色哦色哦哦色天天综合| 亚洲欧美日韩国产成人精品影院 | 国产欧美一区二区在线| 久久99精品久久只有精品| 精品日韩欧美在线| 黄色日韩网站视频| 久久久高清一区二区三区| 蜜桃视频第一区免费观看| 欧美tk—视频vk| 国产美女精品在线| 欧美激情中文不卡| 顶级嫩模精品视频在线看| 欧美激情综合在线| 91丨九色丨黑人外教| 亚洲激情校园春色| 在线观看av一区| 亚洲成人自拍一区| 91麻豆精品国产91久久久久| 亚洲v精品v日韩v欧美v专区| 日韩欧美久久一区| 国产1区2区3区精品美女| 亚洲国产精品精华液2区45| 99精品视频一区二区| 亚洲欧美一区二区不卡| 在线一区二区视频| 天堂久久久久va久久久久| 精品久久人人做人人爽| 国产成人在线免费| 亚洲日本一区二区| 欧美日韩高清一区二区| 奇米四色…亚洲| 欧美国产精品一区二区| 色诱视频网站一区| 免费观看一级特黄欧美大片| 国产欧美日产一区| 欧美日韩国产一区| 国产一区二区三区综合| 国产精品久久久久久久蜜臀| 精品视频在线免费看| 理论电影国产精品| 18欧美乱大交hd1984| 欧美一级一区二区| 国产成a人亚洲| 亚洲国产wwwccc36天堂| 3d动漫精品啪啪一区二区竹菊| 国产成人免费视频一区| 一区二区在线免费观看| 日韩你懂的电影在线观看| 成人国产一区二区三区精品| 一区二区三区四区五区视频在线观看 | 99re在线精品| 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品麻豆视频| 91精品国产入口| 欧美无人高清视频在线观看| 国内精品伊人久久久久av影院| 亚洲免费高清视频在线| 日韩亚洲欧美一区| 成人在线视频一区二区| 麻豆国产欧美日韩综合精品二区| 国产精品女主播在线观看| 欧美高清精品3d| av电影天堂一区二区在线| 一区二区高清在线| 中文字幕在线免费不卡| 欧美一区二区三区不卡| 99这里只有精品| 精品一区二区综合| 亚洲精品国产高清久久伦理二区| 久久午夜电影网| 欧美一区二区三级| 在线视频亚洲一区| 老司机午夜精品| 奇米一区二区三区av| 一区二区成人在线| 国产精品色在线观看| 久久这里只有精品视频网| 欧美日韩日日夜夜| 97久久精品人人做人人爽| 国产成人精品一区二|