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

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

?? smv.c

?? 這個(gè)工具集提供以下結(jié)構(gòu)化分析和UML分析中所用的圖形化繪圖工具:ER-diagrams, data and event flow diagrams and state-transition diagr
?? C
字號(hào):
/* This file generates quick-and-dirty NuSMV output */#include "smv.h"#include "transition.h"#include "initialstate.h"#include "util.h"#include <ctype.h>#include <stdio.h>#include <string.h>SMV::SMV(Graph *st) {	graph = st;}SMV::~SMV() {}void SMV::WriteSMV(const char *filename, List<string> *internal,			const string *formula) {	/* Generate the data structure needed for conversion to SMV format	   and write it to disk. */	FILE *fp;	fp = fopen(filename, "w");	if ( ! fp )		return /* False */;	fprintf(fp, "MODULE main\n\nVAR\n-- state variables\n\tI___INITIAL : boolean ;\n");	/* for every state, there is a variable state_<number> */	List<Subject *> states;	List<string> names;	graph->GetNodes(&states, Code::INITIAL_STATE);	graph->GetNodes(&states, Code::STATE);	graph->GetNodes(&states, Code::DECISION_POINT);	for ( states.first() ; ! states.done() ; states.next() ) {		fprintf(fp, "\tstate_%d : boolean ;\n", states.cur()->GetId());		AddNames(&names, NULL, states.cur()->GetName());	}	fprintf(fp, "-- event variables\n");	/* for every event, there is a variable ev_<name> */	List<Subject *>trans;	List<string> evnames, externevnames;	graph->GetEdges(&trans, Code::TRANSITION);	for ( trans.first() ; ! trans.done() ; trans.next() ) {		Transition *tr = dynamic_cast<Transition *>(trans.cur());		if ( ! check(tr) )			continue;		AddNames(&evnames, NULL, tr->GetEvent());		AddNames(&externevnames, NULL, tr->GetEvent());		for ( int i = tr->NrActions() ; i-- > 0 ; ) {			const string *act = tr->GetAction(i);			if ( evnames.find(*act) < 0 )				evnames.add(*act);		}	}	for ( evnames.first() ; ! evnames.done() ; evnames.next() ) {		fprintf(fp, "\tev_%s : boolean ;\n", evnames.cur().getstr());		if ( externevnames.find(evnames.cur()) < 0 )			internal->add(evnames.cur());	}	externevnames.empty();	/* The initial state: I___INITIAL is true, all other states and events	   are false */	fprintf(fp, "INIT\n\tI___INITIAL");	for ( states.first() ; ! states.done() ; states.next() )		fprintf(fp, "\n\t& ! state_%d", states.cur()->GetId());	for ( evnames.first() ; ! evnames.done() ; evnames.next() )		fprintf(fp, "\n\t& ! ev_%s", evnames.cur().getstr());	fprintf(fp, "\n");	/* definition of propositional symbols as disjunctions of states */	fprintf(fp, "DEFINE\n");	for ( names.first() ; ! names.done() ; names.next() ) {		string *name = &(names.cur());		fprintf(fp, "\t%s := FALSE", names.cur().getstr() );		for ( states.first() ; ! states.done() ; states.next() ) {			const string *n = states.cur()->GetName();			const char *found = strstr(n->getstr(), name->getstr());			if ( found && (n->getstr() == found					    || isspace(found[-1]))					&& ('\0' == found[name->length()]					    || isspace(found[name->length()])) )				fprintf(fp,"\n\t\t| state_%d",					states.cur()->GetId());		}		fprintf(fp, " ;\n");	}	names.empty();	/* definition of transition enabledness as conditions on source state */	for ( trans.first() ; ! trans.done() ; trans.next() ) {		Transition *tr = dynamic_cast<Transition *>(trans.cur());		if ( ! check(tr) )			continue;		fprintf(fp, "\ttrans_%d_enabled := state_%d", tr->GetId(),					tr->GetSubject1()->GetId());		List<string> events, guards;		AddNames(&events, &guards, tr->GetEvent());		for ( events.first() ; ! events.done() ; events.next() )			fprintf(fp, "\n\t\t& ev_%s", events.cur().getstr());		events.empty();		for ( guards.first() ; ! guards.done() ; guards.next() )			fprintf(fp, "\n\t\t& %s", guards.cur().getstr());		guards.empty();		fprintf(fp, " ;\n");		fprintf(fp, "\ttrans_%d_taken := trans_%d_enabled\n"					"\t\t& next(state_%d)",					tr->GetId(), tr->GetId(),					tr->GetSubject2()->GetId());		if ( tr->GetSubject1() != tr->GetSubject2() )			fprintf(fp, "\n\t\t& next(! state_%d)",						tr->GetSubject1()->GetId());		for ( int i = tr->NrActions() ; i-- > 0 ; )			fprintf(fp, "\n\t\t& next(ev_%s)",						tr->GetAction(i)->getstr());		fprintf(fp, " ;\n");	}	/* definition of initial transition */	fprintf(fp, "\tinit_enabled := I___INITIAL ;\n\tinit_taken := init_enabled");	for ( states.first() ; ! states.done() && Code::INITIAL_STATE == states.cur()->GetClassType() ; states.next() ) {		InitialState *is = dynamic_cast<InitialState *>(states.cur());		if ( ! check(is) )			continue;		fprintf(fp, "\n\t\t& next(state_%d)", states.cur()->GetId());		for ( int i = is->NrActions() ; i-- > 0 ; )			fprintf(fp, "\n\t\t& next(ev_%s)", is->GetAction(i));	}	fprintf(fp, " ;\n");	/* definition of stable state	   (For a step semantics, change this definition to: stable := 1 ; */	fprintf(fp,"\tstable := ! init_enabled");	for ( trans.first() ; ! trans.done() ; trans.next() )		fprintf(fp,"\n\t\t& ! trans_%d_enabled", trans.cur()->GetId());	fprintf(fp, " ;\n");	/* definition of the transition relation */	fprintf(fp, "\nTRANS\n\tnext(! I___INITIAL)\n");	/* if a transition is enabled, it is taken -- unless a conflicting	   transition is taken */	for ( trans.first() ; ! trans.done() ; trans.next() ) {		Transition *tr = dynamic_cast<Transition *>(trans.cur());		if ( ! check(tr) )			continue;		fprintf(fp, "\t& (trans_%d_enabled -> (trans_%d_taken",					tr->GetId(), tr->GetId());		List<Subject *> conflict;		graph->GetEdgesFrom(&conflict, tr->GetSubject1(),					Code::TRANSITION);		conflict.first();		if ( ! conflict.done() && (tr != conflict.cur()						|| (conflict.next(),						! conflict.done())) ) {			fprintf(fp, " <-> ");			for ( ;; ) {				fprintf(fp, "! trans_%d_taken",						conflict.cur()->GetId());				conflict.next();				if ( conflict.done() || (tr == conflict.cur()							&& (conflict.next(),							conflict.done())) )					break;				fprintf(fp, " & ");			}		}		conflict.empty();		fprintf(fp, "))\n");	}	fprintf(fp, "\t& (init_enabled -> init_taken)\n");	/* states only change by taking an edge */	for ( states.first() ; ! states.done() ; states.next() ) {		List<Subject *> edges;		graph->GetEdgesFrom(&edges, states.cur(), Code::TRANSITION);		graph->GetEdgesTo(&edges, states.cur(), Code::TRANSITION);		fprintf(fp, "\t& (state_%d = next(state_%d)",					states.cur()->GetId(),					states.cur()->GetId());		for ( edges.first() ; ! edges.done() ; edges.next() )			fprintf(fp, " | trans_%d_taken", edges.cur()->GetId());		if ( Code::INITIAL_STATE == states.cur()->GetClassType() )			fprintf(fp, " | init_taken");		fprintf(fp, ")\n");	}	states.empty();	/* internal events only happen when specific transitions are taken */	/* other events only happen when specific transitions are taken or the	   state is stable. */	for ( evnames.first() ; ! evnames.done() ; evnames.next() ) {		string *ev = &(evnames.cur());		fprintf(fp, "\t& (next(! ev_%s)", ev->getstr());		for ( trans.first() ; ! trans.done() ; trans.next() ) {			Transition *tr =				dynamic_cast<Transition *>(trans.cur());			if ( ! check(tr) )				continue;			if ( tr->HasAction(ev) )				fprintf(fp, " | trans_%d_taken", tr->GetId());		}		if ( ! internal->contains(*ev) )			fprintf(fp, " | stable");		fprintf(fp, ")\n");	}	trans.empty();	/* timeouts must happen infinitely often */	fprintf(fp, "\nFAIRNESS\n\tev_timeout\n");	/* a timeout never happens at the same time as another event */	evnames.first();	if ( ! evnames.done() && ("timeout" != evnames.cur()				|| (evnames.next(), ! evnames.done())) ) {		fprintf(fp, "\nINVAR\n\t");		for ( ;; ) {				fprintf(fp, "ev_%s", evnames.cur().getstr());			evnames.next();			if ( evnames.done() || ("timeout" == evnames.cur()							&& (evnames.next(),							evnames.done())) )				break;			fprintf(fp, "\n\t| ");		}		evnames.empty();		fprintf(fp, " -> ! ev_timeout\n");	}	fprintf(fp, "\nSPEC\n\t%s\n", formula->getstr());	fclose(fp);}void SMV::AddNames(List<string> *names, List<string> *guards,				const string *statename) {	/* Extracts single words and guards from statename. */	const char *cp = statename->getstr();	while ( *cp ) {		while ( *cp && isspace(*cp) )			++cp;		if ( ! *cp )			break;		const char *ep = cp;		if ( '[' == *cp ) {			cp++;			while ( *++ep ) {				if ( ']' == *ep ) {					if ( guards ) {						string name;						name.add(cp, ep - cp);						if ( guards->find(name) < 0 )							guards->add(name);					}					++ep;					break;				}			}		} else {			while ( *++ep && ! isspace(*ep) && '[' != *ep )				;			if ( names ) {				string name;				name.add(cp, ep - cp);				if ( names->find(name) < 0 )					names->add(name);			}		}		cp = ep;	}}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青青草成人在线观看| 久久伊人中文字幕| 在线观看一区日韩| 欧美视频一区二区三区在线观看| 一本色道**综合亚洲精品蜜桃冫| 成人激情免费网站| 欧洲人成人精品| 日韩欧美一区二区不卡| 精品1区2区在线观看| 国产午夜亚洲精品不卡| 国产精品电影一区二区| 亚洲gay无套男同| 麻豆91免费观看| 色婷婷精品大在线视频| 国产欧美日韩综合精品一区二区| 亚洲一区二区四区蜜桃| 国产aⅴ综合色| 日韩精品一区二区三区老鸭窝| 日韩理论片网站| 国产精品一区二区三区网站| 日韩免费电影网站| 亚洲成人中文在线| 国产很黄免费观看久久| 欧美视频中文字幕| 日本午夜精品一区二区三区电影| aaa欧美日韩| 国产婷婷精品av在线| 免费观看日韩电影| 欧美少妇一区二区| 亚洲高清免费在线| 欧美网站大全在线观看| 一区二区三区日韩欧美| 色老综合老女人久久久| 一区二区三区日本| 国产成人在线视频网站| 精品欧美黑人一区二区三区| 美腿丝袜在线亚洲一区| 欧美精品一区二区三区四区| 日韩电影免费在线观看网站| 欧美亚洲国产一区二区三区va| 2021中文字幕一区亚洲| 亚洲国产成人高清精品| 成人精品视频.| 国产三级精品在线| 国产乱码精品一区二区三区av | 91福利区一区二区三区| 国产精品久久久爽爽爽麻豆色哟哟| 美女网站视频久久| 色婷婷av一区二区三区软件 | 日韩欧美国产不卡| 三级一区在线视频先锋| 色综合中文字幕国产 | 一区二区三区在线视频观看58| 成人午夜在线播放| 亚洲人成7777| 91福利国产精品| 日韩在线卡一卡二| 久久久久久一二三区| 成人av一区二区三区| 怡红院av一区二区三区| av福利精品导航| 日韩电影免费一区| 国产女主播一区| 911精品国产一区二区在线| 亚洲成人在线免费| 中文字幕高清一区| 欧美日韩视频专区在线播放| 亚洲18色成人| 中文字幕不卡在线| 51精品秘密在线观看| 美女高潮久久久| 亚洲精品伦理在线| 久久丝袜美腿综合| 51精品秘密在线观看| 国产中文字幕一区| 日韩av一区二区三区| 中文字幕亚洲一区二区va在线| 日韩一区二区三区四区五区六区| 丁香婷婷综合激情五月色| 理论电影国产精品| 亚洲国产va精品久久久不卡综合| 国产女同性恋一区二区| 欧美成人女星排行榜| 欧美日韩色一区| 日本韩国一区二区三区视频| 极品美女销魂一区二区三区| 天使萌一区二区三区免费观看| 国产精品狼人久久影院观看方式| 在线观看欧美黄色| 欧美午夜电影在线播放| av福利精品导航| 国产精品影视天天线| 亚洲国产成人高清精品| 亚洲国产婷婷综合在线精品| 一区二区在线电影| 亚洲超碰精品一区二区| 日韩高清一区在线| 狠狠色丁香久久婷婷综合_中| 一区二区成人在线视频 | 久久久不卡网国产精品二区| 精品国产伦理网| 国产精品乱人伦| 国产精品亲子伦对白| 亚洲三级免费电影| 亚洲激情图片一区| 亚洲免费伊人电影| 午夜视频一区在线观看| 日本美女一区二区三区视频| 一个色妞综合视频在线观看| 午夜av一区二区| 国产成人亚洲综合a∨婷婷| 一本到三区不卡视频| 欧美一区2区视频在线观看| 国产精品午夜电影| 日韩综合小视频| www.欧美亚洲| 日韩欧美区一区二| 亚洲乱码国产乱码精品精小说| 亚洲色欲色欲www在线观看| 日韩av电影天堂| 色婷婷av一区二区三区软件| 日韩一区二区精品葵司在线| 国产精品电影一区二区| 久久精品久久精品| 不卡电影一区二区三区| 久久综合狠狠综合| 蜜乳av一区二区三区| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲激情图片一区| 色综合中文综合网| 国产欧美日韩综合| 亚洲国产成人av网| 成人黄色小视频在线观看| 欧美tickle裸体挠脚心vk| 日韩精品亚洲一区二区三区免费| 日本高清免费不卡视频| 2欧美一区二区三区在线观看视频| 亚洲一线二线三线视频| 色播五月激情综合网| 国产精品麻豆欧美日韩ww| gogogo免费视频观看亚洲一| 久久伊99综合婷婷久久伊| 激情综合网最新| 国产精品久久看| 在线国产电影不卡| 久久精品国产99| 亚洲精品一区二区三区福利| 国产一区日韩二区欧美三区| 久久久久国产精品麻豆ai换脸| 国产精品一区二区三区99| 亚洲免费av网站| 欧美成人a∨高清免费观看| 国产精品一二三四| 国产精品传媒入口麻豆| 欧洲精品一区二区三区在线观看| 美女爽到高潮91| 亚洲视频每日更新| 久久久久久久久久久久久久久99 | 成人午夜免费视频| 亚洲一二三四在线| 久久男人中文字幕资源站| 欧美伊人精品成人久久综合97| 一区二区在线电影| 欧美大胆人体bbbb| 日韩一级片网站| 欧美精品日韩一区| 欧美二区三区的天堂| 欧美亚洲一区二区三区四区| 一本在线高清不卡dvd| 一本色道久久综合狠狠躁的推荐 | 中文字幕亚洲精品在线观看 | av午夜精品一区二区三区| 99精品欧美一区二区蜜桃免费| 国产成人亚洲综合色影视| 丁香啪啪综合成人亚洲小说| 不卡一区二区中文字幕| 成人av手机在线观看| 成人av在线观| 欧美日韩国产高清一区二区| 欧美一区永久视频免费观看| 精品国产乱码久久久久久免费| 欧美videos大乳护士334| 国产午夜精品久久久久久久| 国产精品久久久久影院色老大| 国产精品久久久久久久久搜平片 | 欧美成va人片在线观看| 国产日韩影视精品| 亚洲精品日韩综合观看成人91| 亚洲一二三四久久| 狠狠色狠狠色综合| 99re66热这里只有精品3直播 | 国产毛片一区二区| 一本色道a无线码一区v| 欧美大片在线观看一区二区| 国产精品免费看片| 精品在线免费观看| 欧美日韩免费观看一区三区| 久久久久9999亚洲精品| 亚洲国产一区视频| 在线观看91视频|