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

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

?? tl_buchi.c

?? 對(duì)軟件進(jìn)行可達(dá)性測(cè)試的軟件
?? C
字號(hào):
/***** tl_spin: tl_buchi.c *****//* Copyright (c) 1995-2003 by Lucent Technologies, Bell Laboratories.     *//* All Rights Reserved.  This software is for educational purposes only.  *//* No guarantee whatsoever is expressed or implied by the distribution of *//* this code.  Permission is given to distribute this code provided that  *//* this introductory message is not removed and no monies are exchanged.  *//* Software written by Gerard J. Holzmann.  For tool documentation see:   *//*             http://spinroot.com/                                       *//* Send all bug-reports and/or questions to: bugs@spinroot.com            *//* Based on the translation algorithm by Gerth, Peled, Vardi, and Wolper, *//* presented at the PSTV Conference, held in 1995, Warsaw, Poland 1995.   */#include "tl.h"extern int tl_verbose, tl_clutter, Total, Max_Red;FILE	*tl_out;	/* if standalone: = stdout; */typedef struct Transition {	Symbol *name;	Node *cond;	int redundant, merged, marked;	struct Transition *nxt;} Transition;typedef struct State {	Symbol	*name;	Transition *trans;	Graph	*colors;	unsigned char redundant;	unsigned char accepting;	unsigned char reachable;	struct State *nxt;} State;static State *never = (State *) 0;static int hitsall;static intsametrans(Transition *s, Transition *t){	if (strcmp(s->name->name, t->name->name) != 0)		return 0;	return isequal(s->cond, t->cond);}static Node *Prune(Node *p){	if (p)	switch (p->ntyp) {	case PREDICATE:	case NOT:	case FALSE:	case TRUE:#ifdef NXT	case NEXT:#endif		return p;	case OR:		p->lft = Prune(p->lft);		if (!p->lft)		{	releasenode(1, p->rgt);			return ZN;		}		p->rgt = Prune(p->rgt);		if (!p->rgt)		{	releasenode(1, p->lft);			return ZN;		}		return p;	case AND:		p->lft = Prune(p->lft);		if (!p->lft)			return Prune(p->rgt);		p->rgt = Prune(p->rgt);		if (!p->rgt)			return p->lft;		return p;	}	releasenode(1, p);	return ZN;}static State *findstate(char *nm){	State *b;	for (b = never; b; b = b->nxt)		if (!strcmp(b->name->name, nm))			return b;	if (strcmp(nm, "accept_all"))	{	if (strncmp(nm, "accept", 6))		{	int i; char altnm[64];			for (i = 0; i < 64; i++)				if (nm[i] == '_')					break;			if (i >= 64)				Fatal("name too long %s", nm);			sprintf(altnm, "accept%s", &nm[i]);			return findstate(altnm);		}	/*	Fatal("buchi: no state %s", nm); */	}	return (State *) 0;}static voidDfs(State *b){	Transition *t;	if (!b || b->reachable) return;	b->reachable = 1;	if (b->redundant)		printf("/* redundant state %s */\n",			b->name->name);	for (t = b->trans; t; t = t->nxt)	{	if (!t->redundant)		{	Dfs(findstate(t->name->name));			if (!hitsall			&&  strcmp(t->name->name, "accept_all") == 0)				hitsall = 1;		}	}}voidretarget(char *from, char *to){	State *b;	Transition *t;	Symbol *To = tl_lookup(to);	if (tl_verbose) printf("replace %s with %s\n", from, to);	for (b = never; b; b = b->nxt)	{	if (!strcmp(b->name->name, from))			b->redundant = 1;		else		for (t = b->trans; t; t = t->nxt)		{	if (!strcmp(t->name->name, from))				t->name = To;	}	}}#ifdef NXTstatic Node *nonxt(Node *n){	switch (n->ntyp) {	case U_OPER:	case V_OPER:	case NEXT:		return ZN;	case OR:		n->lft = nonxt(n->lft);		n->rgt = nonxt(n->rgt);		if (!n->lft || !n->rgt)			return True;		return n;	case AND:		n->lft = nonxt(n->lft);		n->rgt = nonxt(n->rgt);		if (!n->lft)		{	if (!n->rgt)				n = ZN;			else				n = n->rgt;		} else if (!n->rgt)			n = n->lft;		return n;	}	return n;}#endifstatic Node *combination(Node *s, Node *t){	Node *nc;#ifdef NXT	Node *a = nonxt(s);	Node *b = nonxt(t);	if (tl_verbose)	{	printf("\tnonxtA: "); dump(a);		printf("\n\tnonxtB: "); dump(b);		printf("\n");	}	/* if there's only a X(f), its equivalent to true */	if (!a || !b)		nc = True;	else		nc = tl_nn(OR, a, b);#else	nc = tl_nn(OR, s, t);#endif	if (tl_verbose)	{	printf("\tcombo: "); dump(nc);		printf("\n");	}	return nc;}Node *unclutter(Node *n, char *snm){	Node *t, *s, *v, *u;	Symbol *w;	/* check only simple cases like !q && q */	for (t = n; t; t = t->rgt)	{	if (t->rgt)		{	if (t->ntyp != AND || !t->lft)				return n;			if (t->lft->ntyp != PREDICATE#ifdef NXT			&&  t->lft->ntyp != NEXT#endif			&&  t->lft->ntyp != NOT)				return n;		} else		{	if (t->ntyp != PREDICATE#ifdef NXT			&&  t->ntyp != NEXT#endif			&&  t->ntyp != NOT)				return n;		}	}	for (t = n; t; t = t->rgt)	{	if (t->rgt)			v = t->lft;		else			v = t;		if (v->ntyp == NOT		&&  v->lft->ntyp == PREDICATE)		{	w = v->lft->sym;			for (s = n; s; s = s->rgt)			{	if (s == t) continue;				if (s->rgt)					u = s->lft;				else					u = s;				if (u->ntyp == PREDICATE				&&  strcmp(u->sym->name, w->name) == 0)				{	if (tl_verbose)					{	printf("BINGO %s:\t", snm);						dump(n);						printf("\n");					}					return False;				}			}	}	}	return n;}static voidclutter(void){	State *p;	Transition *s;	for (p = never; p; p = p->nxt)	for (s = p->trans; s; s = s->nxt)	{	s->cond = unclutter(s->cond, p->name->name);		if (s->cond		&&  s->cond->ntyp == FALSE)		{	if (s != p->trans 			||  s->nxt)				s->redundant = 1;		}	}}static voidshowtrans(State *a){	Transition *s;	for (s = a->trans; s; s = s->nxt)	{	printf("%s ", s->name?s->name->name:"-");		dump(s->cond);		printf(" %d %d %d\n", s->redundant, s->merged, s->marked);	}}static intmergetrans(void){	State *b;	Transition *s, *t;	Node *nc; int cnt = 0;	for (b = never; b; b = b->nxt)	{	if (!b->reachable) continue;		for (s = b->trans; s; s = s->nxt)		{	if (s->redundant) continue;			for (t = s->nxt; t; t = t->nxt)			if (!t->redundant			&&  !strcmp(s->name->name, t->name->name))			{	if (tl_verbose)				{	printf("===\nstate %s, trans to %s redundant\n",					b->name->name, s->name->name);					showtrans(b);					printf(" conditions ");					dump(s->cond); printf(" <-> ");					dump(t->cond); printf("\n");				}				if (!s->cond) /* same as T */				{	releasenode(1, t->cond); /* T or t */					nc = True;				} else if (!t->cond)				{	releasenode(1, s->cond);					nc = True;				} else				{	nc = combination(s->cond, t->cond);				}				t->cond = rewrite(nc);				t->merged = 1;				s->redundant = 1;				cnt++;				break;	}	}	}	return cnt;}static intall_trans_match(State *a, State *b){	Transition *s, *t;	int found, result = 0;	if (a->accepting != b->accepting)		goto done;	for (s = a->trans; s; s = s->nxt)	{	if (s->redundant) continue;		found = 0;		for (t = b->trans; t; t = t->nxt)		{	if (t->redundant) continue;			if (sametrans(s, t))			{	found = 1;				t->marked = 1;				break;		}	}		if (!found)			goto done;	}	for (s = b->trans; s; s = s->nxt)	{	if (s->redundant || s->marked) continue;		found = 0;		for (t = a->trans; t; t = t->nxt)		{	if (t->redundant) continue;			if (sametrans(s, t))			{	found = 1;				break;		}	}		if (!found)			goto done;	}	result = 1;done:	for (s = b->trans; s; s = s->nxt)		s->marked = 0;	return result;}#ifndef NO_OPT#define BUCKY#endif#ifdef BUCKYstatic intall_bucky(State *a, State *b){	Transition *s, *t;	int found, result = 0;	for (s = a->trans; s; s = s->nxt)	{	if (s->redundant) continue;		found = 0;		for (t = b->trans; t; t = t->nxt)		{	if (t->redundant) continue;			if (isequal(s->cond, t->cond))			{	if (strcmp(s->name->name, b->name->name) == 0				&&  strcmp(t->name->name, a->name->name) == 0)				{	found = 1;	/* they point to each other */					t->marked = 1;					break;				}				if (strcmp(s->name->name, t->name->name) == 0				&&  strcmp(s->name->name, "accept_all") == 0)				{	found = 1;					t->marked = 1;					break;				/* same exit from which there is no return */				}			}		}		if (!found)			goto done;	}	for (s = b->trans; s; s = s->nxt)	{	if (s->redundant || s->marked) continue;		found = 0;		for (t = a->trans; t; t = t->nxt)		{	if (t->redundant) continue;			if (isequal(s->cond, t->cond))			{	if (strcmp(s->name->name, a->name->name) == 0				&&  strcmp(t->name->name, b->name->name) == 0)				{	found = 1;					t->marked = 1;					break;				}				if (strcmp(s->name->name, t->name->name) == 0				&&  strcmp(s->name->name, "accept_all") == 0)				{	found = 1;					t->marked = 1;					break;				}			}		}		if (!found)			goto done;	}	result = 1;done:	for (s = b->trans; s; s = s->nxt)		s->marked = 0;	return result;}static intbuckyballs(void){	State *a, *b, *c, *d;	int m, cnt=0;	do {		m = 0; cnt++;		for (a = never; a; a = a->nxt)		{	if (!a->reachable) continue;			if (a->redundant) continue;			for (b = a->nxt; b; b = b->nxt)			{	if (!b->reachable) continue;				if (b->redundant) continue;				if (all_bucky(a, b))				{	m++;					if (tl_verbose)					{	printf("%s bucky match %s\n",						a->name->name, b->name->name);					}					if (a->accepting && !b->accepting)					{	if (strcmp(b->name->name, "T0_init") == 0)						{	c = a; d = b;							b->accepting = 1;						} else						{	c = b; d = a;						}					} else					{	c = a; d = b;					}					retarget(c->name->name, d->name->name);					if (!strncmp(c->name->name, "accept", 6)					&&  Max_Red == 0)					{	char buf[64];						sprintf(buf, "T0%s", &(c->name->name[6]));						retarget(buf, d->name->name);					}					break;				}		}	}	} while (m && cnt < 10);	return cnt-1;}#endifstatic intmergestates(int v){	State *a, *b;	int m, cnt=0;	if (tl_verbose)		return 0;	do {		m = 0; cnt++;		for (a = never; a; a = a->nxt)		{	if (v && !a->reachable) continue;			if (a->redundant) continue; /* 3.3.10 */			for (b = a->nxt; b; b = b->nxt)			{	if (v && !b->reachable) continue;				if (b->redundant) continue; /* 3.3.10 */				if (all_trans_match(a, b))				{	m++;					if (tl_verbose)					{	printf("%d: state %s equals state %s\n",						cnt, a->name->name, b->name->name);						showtrans(a);						printf("==\n");						showtrans(b);					}					retarget(a->name->name, b->name->name);					if (!strncmp(a->name->name, "accept", 6)					&&  Max_Red == 0)					{	char buf[64];						sprintf(buf, "T0%s", &(a->name->name[6]));						retarget(buf, b->name->name);					}					break;				}#if 0				else if (tl_verbose)				{	printf("\n%d: state %s differs from state %s [%d,%d]\n",						cnt, a->name->name, b->name->name,						a->accepting, b->accepting);					showtrans(a);					printf("==\n");					showtrans(b);					printf("\n");				}#endif		}	}	} while (m && cnt < 10);	return cnt-1;}static int tcnt;static voidrev_trans(Transition *t) /* print transitions  in reverse order... */{	if (!t) return;	rev_trans(t->nxt);	if (t->redundant && !tl_verbose) return;	fprintf(tl_out, "\t:: (");	if (dump_cond(t->cond, t->cond, 1))		fprintf(tl_out, "1");	fprintf(tl_out, ") -> goto %s\n", t->name->name);	tcnt++;}static voidprintstate(State *b){	if (!b || (!tl_verbose && !b->reachable)) return;	b->reachable = 0;	/* print only once */	fprintf(tl_out, "%s:\n", b->name->name);	if (tl_verbose)	{	fprintf(tl_out, "	/* ");		dump(b->colors->Other);		fprintf(tl_out, " */\n");	}	if (strncmp(b->name->name, "accept", 6) == 0	&&  Max_Red == 0)		fprintf(tl_out, "T0%s:\n", &(b->name->name[6]));	fprintf(tl_out, "\tif\n");	tcnt = 0;	rev_trans(b->trans);	if (!tcnt) fprintf(tl_out, "\t:: false\n");	fprintf(tl_out, "\tfi;\n");	Total++;}voidaddtrans(Graph *col, char *from, Node *op, char *to){	State *b;	Transition *t;	t = (Transition *) tl_emalloc(sizeof(Transition));	t->name = tl_lookup(to);	t->cond = Prune(dupnode(op));	if (tl_verbose)	{	printf("\n%s <<\t", from); dump(op);		printf("\n\t"); dump(t->cond);		printf(">> %s\n", t->name->name);	}	if (t->cond) t->cond = rewrite(t->cond);	for (b = never; b; b = b->nxt)		if (!strcmp(b->name->name, from))		{	t->nxt = b->trans;			b->trans = t;			return;		}	b = (State *) tl_emalloc(sizeof(State));	b->name   = tl_lookup(from);	b->colors = col;	b->trans  = t;	if (!strncmp(from, "accept", 6))		b->accepting = 1;	b->nxt = never;	never  = b;}static voidclr_reach(void){	State *p;	for (p = never; p; p = p->nxt)		p->reachable = 0;	hitsall = 0;}voidfsm_print(void){	State *b; int cnt1, cnt2=0;	extern void put_uform(void);	if (tl_clutter) clutter();	b = findstate("T0_init");	if (b && (Max_Red == 0))		b->accepting = 1;	mergestates(0); 	b = findstate("T0_init");	fprintf(tl_out, "never {    /* ");		put_uform();	fprintf(tl_out, " */\n");	do {		clr_reach();		Dfs(b);		cnt1 = mergetrans();		cnt2 = mergestates(1);		if (tl_verbose)			printf("/* >>%d,%d<< */\n", cnt1, cnt2);	} while (cnt2 > 0);#ifdef BUCKY	buckyballs();	clr_reach();	Dfs(b);#endif	if (b && b->accepting)		fprintf(tl_out, "accept_init:\n");	if (!b && !never)	{	fprintf(tl_out, "	0 /* false */;\n");	} else	{	printstate(b);	/* init state must be first */		for (b = never; b; b = b->nxt)			printstate(b);	}	if (hitsall)	fprintf(tl_out, "accept_all:\n	skip\n");	fprintf(tl_out, "}\n");}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品久久精品色综合| 欧美色图12p| 欧美日韩专区在线| 久久99精品网久久| 欧美一级一区二区| 亚洲一区二区视频在线观看| 91麻豆视频网站| 欧美国产视频在线| 成人午夜免费视频| 国产精品无遮挡| 成人免费高清视频| 亚洲主播在线播放| 2022国产精品视频| 国产精品一区二区久久不卡| 2020国产精品自拍| 色老头久久综合| 午夜伦欧美伦电影理论片| 欧美男生操女生| 久久99精品国产.久久久久久| 亚洲四区在线观看| 在线一区二区三区四区五区| 粉嫩嫩av羞羞动漫久久久 | 色悠久久久久综合欧美99| 国产精品三级电影| 久久综合丝袜日本网| 欧美精品色一区二区三区| 久久精品国产99久久6| 国产亚洲欧美在线| 91丨porny丨中文| 国产成人a级片| 一区二区激情小说| 欧美一区二区不卡视频| 在线中文字幕一区二区| 96av麻豆蜜桃一区二区| 日韩精品一二三| 久久久久久影视| 欧美自拍偷拍一区| 国产精品综合二区| 国产伦精品一区二区三区视频青涩| 亚洲国产激情av| 久久久99免费| 久久亚洲精品国产精品紫薇| 精品国产百合女同互慰| eeuss鲁片一区二区三区| 免费视频一区二区| 亚洲伦理在线精品| 久久九九国产精品| 国产欧美精品一区二区色综合朱莉 | 日韩欧美三级在线| gogogo免费视频观看亚洲一| 成人av免费网站| 免费在线观看不卡| 久久国产精品99久久人人澡| 久久精品国产999大香线蕉| 理论片日本一区| 国产裸体歌舞团一区二区| 国产91综合一区在线观看| 成熟亚洲日本毛茸茸凸凹| 99精品黄色片免费大全| 色噜噜久久综合| 欧美视频一区二区三区在线观看| 粉嫩av一区二区三区| a在线播放不卡| 欧美专区在线观看一区| 51精品视频一区二区三区| 91在线视频官网| 在线观看av一区二区| 欧美一区二区三区影视| 久久久亚洲国产美女国产盗摄| 国产日韩欧美高清| 国产精品国产精品国产专区不蜜| 精品成人私密视频| 国产精品不卡视频| 香蕉av福利精品导航| 亚洲欧美另类久久久精品2019| 国产色婷婷亚洲99精品小说| 亚洲色图另类专区| 一区二区免费在线| 久久国产精品色婷婷| 99精品久久只有精品| 欧美高清www午色夜在线视频| 精品国产不卡一区二区三区| 亚洲欧美日本韩国| 精品午夜一区二区三区在线观看| 不卡的av网站| 日韩一区二区三区视频在线观看| 欧美日韩久久久一区| 久久综合视频网| 一区二区激情小说| 国产成人一级电影| 欧美日韩一区三区四区| 国产三级一区二区三区| 亚洲第一激情av| 成人性生交大片| 欧美一区二区女人| 亚洲欧美日韩在线播放| 国产真实乱偷精品视频免| 国产精品一区不卡| 欧美日韩第一区日日骚| 国产欧美综合在线观看第十页| 亚洲3atv精品一区二区三区| 成人性视频免费网站| 日韩一区二区三区在线| 亚洲主播在线观看| 成人h精品动漫一区二区三区| 日韩一区二区三区视频在线 | 久久99久久99小草精品免视看| 99re亚洲国产精品| 久久久国产综合精品女国产盗摄| 亚洲午夜久久久久久久久电影院| 首页国产丝袜综合| 一本一本久久a久久精品综合麻豆| 久久综合狠狠综合久久激情| 午夜精品久久久久久久久| 91色视频在线| 欧美韩国一区二区| 韩国午夜理伦三级不卡影院| 欧美精品久久久久久久久老牛影院| 中文字幕视频一区| 五月天激情综合| 日本精品免费观看高清观看| 国产欧美一区二区精品性| 麻豆久久久久久| 欧美高清视频在线高清观看mv色露露十八| ...xxx性欧美| eeuss鲁片一区二区三区在线看| 国产欧美精品一区二区色综合| 免费看黄色91| 在线电影院国产精品| 亚洲国产精品天堂| 欧美在线制服丝袜| 亚洲精品视频观看| 99久久精品国产导航| 国产精品美女www爽爽爽| 国产麻豆视频一区| 亚洲精品在线一区二区| 日日夜夜免费精品视频| 欧美日韩国产123区| 日本v片在线高清不卡在线观看| 欧美偷拍一区二区| 午夜激情一区二区三区| 欧美中文字幕久久| 亚洲福利视频导航| 欧美日韩不卡在线| 日韩av电影一区| 成人毛片视频在线观看| 中文字幕在线播放不卡一区| k8久久久一区二区三区| 亚洲欧美精品午睡沙发| 在线视频观看一区| 亚洲综合精品自拍| 欧美精选在线播放| 免费成人av在线播放| 久久综合久色欧美综合狠狠| 国产成人无遮挡在线视频| 日本一区二区三级电影在线观看 | 亚洲午夜三级在线| 欧美一区二区三区思思人| 蜜桃av噜噜一区| 国产天堂亚洲国产碰碰| 91蝌蚪porny成人天涯| 五月婷婷激情综合| 日韩精品中文字幕在线一区| 国产精品中文字幕一区二区三区| 国产精品久久看| 在线观看免费亚洲| 黑人巨大精品欧美一区| 日韩美女精品在线| 欧美美女视频在线观看| 久久99精品久久久久久国产越南 | 男人的天堂久久精品| 久久人人97超碰com| 91亚洲国产成人精品一区二区三| 亚洲成av人片www| 精品久久久久久久一区二区蜜臀| 三级欧美韩日大片在线看| 26uuu国产在线精品一区二区| av电影在线观看一区| 亚洲成人一区二区| 久久伊人中文字幕| 色综合天天做天天爱| 国产精品欧美一级免费| 欧美色综合久久| 国产精品自拍在线| 亚洲h动漫在线| 国产视频911| 91精品国产入口| 99久久国产综合精品麻豆| 日日摸夜夜添夜夜添国产精品| 国产性做久久久久久| 欧美日韩一级片在线观看| 国产麻豆视频精品| 亚洲成av人片一区二区三区| 久久久99精品久久| 色8久久精品久久久久久蜜| 久国产精品韩国三级视频| 一区二区三区91| 国产欧美日韩不卡免费| 日韩精品中文字幕一区二区三区 | 国产91露脸合集magnet|