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

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

?? nfa.cpp

?? Full support for extended regular expressions (those with intersection and complement); Support for
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		nfa.add_epsilon_transition(local_initial_state, new_state_i);
		nfa.add_epsilon_transition(new_state_i, new_state_ii);
		nfa.add_epsilon_transition(new_state_iii, new_state_iv);
		nfa.add_epsilon_transition(new_state_iv, local_final_state);
		for(int j=0; j<nfa.number_of_symbols; j++)
		{
			nfa.add_transition(new_state_i, new_state_i, j);
			nfa.add_transition(new_state_iv, new_state_iv, j);
		}
		
	#ifdef DEBUG_CONTAINS
		cout << "contains: " << local_initial_state << " -> "
			<< new_state_i << " -> " << new_state_ii << " -> "
			<< new_state_iii << " -> " << new_state_iv << " -> "
			<< local_final_state << "\n";
	#endif
		construct_nfa_proc(nfa, expr_cont.expr, new_state_ii, new_state_iii, recursive_path);
	}
	else if(typeid(*expr)==typeid(NonterminalExpressionEpsilon))
	{
	#ifdef DEBUG_EPSILON
		cout << "epsilon: " << local_initial_state << " -> "
			<< local_final_state << "\n";
	#endif
		nfa.add_epsilon_transition(local_initial_state, local_final_state);
	}
	else if(typeid(*expr)==typeid(NonterminalExpressionSharpSign))
	{
	#ifdef DEBUG_SHARP
		cout << "sharp: " << local_initial_state << " -> "
			<< local_final_state << "\n";
	#endif
		for(int i=0; i<=data.variables.alphabet_cardinality; i++)
			nfa.add_transition(local_initial_state, local_final_state, i);
	}
	else if(typeid(*expr)==typeid(NonterminalExpressionSymbol))
	{
		NonterminalExpressionSymbol &expr_s=*dynamic_cast<NonterminalExpressionSymbol *>(expr);
		if(expr_s.expr->is_nts)
		{
			int nn=expr_s.expr->nn;
			assert(nn>=0);
			
			if(data.nonterminals[nn].expanded)
			{
				set<int> actual_symbols=set<int>(*(data.nonterminals[nn].expanded) & UnionOfIntervals<int>(0, data.variables.alphabet_cardinality-1));
				for(set<int>::const_iterator p=actual_symbols.begin(); p!=actual_symbols.end(); p++)
					nfa.add_transition(local_initial_state, local_final_state, *p);
			}
			else if(recursive_path.count(nn))
				nfa.add_epsilon_transition(local_initial_state, recursive_path[nn]);
			else
			{
				// if this usage is not recursive, then
				// i. if it starts a recursion, then mark it as
				//   recursive for the descendants.
				// ii. insert its whole body of rules.
				// iii. if it has been marked, then unmark it.
				
				bool here_starts_a_recursion=data.derivation_paths[nn][nn].v.size();
				int state_used_as_initial;
				
				if(here_starts_a_recursion)
				{
					// introduction of an ancillary state
					// helps to avoid a really bad error.
					state_used_as_initial=nfa.add_state();
					nfa.add_epsilon_transition(local_initial_state, state_used_as_initial);
					recursive_path[nn]=state_used_as_initial;
				}
				else
					state_used_as_initial=local_initial_state;
				
				NonterminalData &nonterminal=data.nonterminals[nn];
				assert(nonterminal.rules.size()==1);
				construct_nfa_proc(nfa, nonterminal.rules[0]->right,
					state_used_as_initial, local_final_state,
					recursive_path);
				
				if(here_starts_a_recursion)
				{
					assert(recursive_path.count(nn) && recursive_path[nn]==state_used_as_initial);
					recursive_path.erase(nn);
				}
			}
		}
		else
		{
		#ifdef DEBUG_TERMINAL_SYMBOL
			cout << "symbol: ";
		#endif
			vector<int> &v=expr_s.expr->s;
			int previous_state=local_initial_state;
			for(int i=0; i<v.size(); i++)
			{
				int next_state=(i<v.size()-1 ? nfa.add_state() : local_final_state);
			#ifdef DEBUG_TERMINAL_SYMBOL
				cout << "(from " << previous_state << " to " << next_state << " on " << v[i] << ")";
			#endif
				nfa.add_transition(previous_state, next_state, v[i]);
				
				if(data.variables.case_insensitive && isalpha(v[i]))
				{
					// the most straightforward method to
					// implement case insensitivity.
					
					if(v[i]!=tolower(v[i]))
						nfa.add_transition(previous_state, next_state, tolower(v[i]));
					if(v[i]!=toupper(v[i]))
						nfa.add_transition(previous_state, next_state, toupper(v[i]));
				}
				
				previous_state=next_state;
			}
		#ifdef DEBUG_TERMINAL_SYMBOL
			cout << "\n";
		#endif
		}
	}
	else
		assert(false);
}

bool construct_nfa()
{
//	cout << "construct_nfa()\n";
//	TimeKeeper tk("nfa");
	
//	data.nfa=NFA(data.variables.alphabet_cardinality);
//	NFA &nfa=data.nfa;
//	int initial_state=nfa.add_state();
//	assert(!initial_state);
	
	// making a separate nfa for each recognized expression
	int number_of_states_in_nfas_for_expressions=0;
	for(int i=0; i<data.recognized_expressions.size(); i++)
	{
		RecognizedExpressionData &re=data.recognized_expressions[i];
		if(re.is_special) continue;
	#ifdef PRINT_WHERE_EXPRESSIONS_ARE_RECOGNIZED
		cout << "Processing " << re.in_serialized_form << "\n";
	#endif
		
		re.nfa=NFA(data.variables.alphabet_cardinality);
		NFA &nfa=re.nfa;
		int initial_state=nfa.add_state();
		
		map<int, int> empty_recursive_path;
		if(re.lookahead) re.intermediate_local_nfa_state=nfa.add_state();
		re.accepting_local_nfa_state=nfa.add_state();
		
		int state_after_expr=(re.lookahead ? re.intermediate_local_nfa_state : re.accepting_local_nfa_state);
		construct_nfa_proc(nfa, re.expr, initial_state, state_after_expr, empty_recursive_path);
		assert(empty_recursive_path.size()==0);
		
		if(re.lookahead)
		{
			int additional_state=nfa.add_state();
			nfa.add_epsilon_transition(re.intermediate_local_nfa_state, additional_state);
			construct_nfa_proc(nfa, re.lookahead,
				additional_state, re.accepting_local_nfa_state,
				empty_recursive_path);
			assert(empty_recursive_path.size()==0);
			
			if(re.lookahead_length==-1)
				nfa.mark_as_important(re.intermediate_local_nfa_state);
		}
		
		nfa.mark_as_accepting(re.accepting_local_nfa_state);
		
	#ifdef PRINT_WHERE_EXPRESSIONS_ARE_RECOGNIZED
		if(re.lookahead)
			cout << "Intermediate local NFA state " << re.intermediate_local_nfa_state
				<< "; recognized ";
		else
			cout << "Recognized ";
		cout << "in local NFA state " << re.accepting_local_nfa_state << "\n";
	#endif
		if(data.variables.dump_nfas_for_expressions)
		{
			ofstream log;
			char log_file_name_without_extension[100];
			sprintf(log_file_name_without_extension, "%s.%u.nfa", data.file_name.c_str(), i);
			
			char log_file_name[100];
			sprintf(log_file_name, "%s.dot", log_file_name_without_extension);
			log.open(log_file_name);
			
			log << "\n";
			log << "/* An NFA created by Dolphin. */\n\n";
			print_dot_message(log_file_name_without_extension, log);
			log << "\n// NFA for expression " << re.in_serialized_form << "\n\n";
			nfa.print_in_dot_format(log);
		}
		number_of_states_in_nfas_for_expressions+=nfa.states.size();
	}
	cout << number_of_states_in_nfas_for_expressions << " states in " << data.recognized_expressions.size() << " NFAs for expressions.\n";
 	
	// Making an NFA for each start condition.
	for(int i=0; i<data.start_conditions.size(); i++)
	{
		StartConditionData &sc=data.start_conditions[i];
		sc.nfa=NFA(data.variables.alphabet_cardinality);
		
		// making a dedicated initial state.
		int initial_state=sc.nfa.add_state();
		assert(initial_state==0);
	}
	
	for(int i=0; i<data.actions.size(); i++)
	{
		ActionData &action=data.actions[i];
		if(action.is_special) continue;
		
		RecognizedExpressionData &re=data.recognized_expressions[action.recognized_expression_number];
		
		for(int j=0; j<data.start_conditions.size(); j++)
			re.offset_of_our_nfa_states_in_nfa_for_start_conditions.push_back(-1);
		
		for(set<int>::iterator p=action.start_condition_numbers.begin(); p!=action.start_condition_numbers.end(); p++)
		{
			StartConditionData &sc=data.start_conditions[*p];
			
			int offset=sc.nfa.incorporate_nfa(re.nfa);
		//	cout << "incorporating nfa for re " << re.in_serialized_form << " in sc " << *p << " at offset " << offset << "\n";
			sc.nfa.add_epsilon_transition(0, offset+0);
			re.offset_of_our_nfa_states_in_nfa_for_start_conditions[*p]=offset;
		}
	}
	
	int number_of_states_in_nfas_for_start_conditions=0;
	for(int i=0; i<data.start_conditions.size(); i++)
	{
		StartConditionData &sc=data.start_conditions[i];
		number_of_states_in_nfas_for_start_conditions+=sc.nfa.states.size();
		
		if(data.variables.dump_nfas_for_start_conditions || (data.variables.dump_nfa_to_file && data.start_conditions.size()>1))
		{
			ofstream log;
			char log_file_name_without_extension[100];
			sprintf(log_file_name_without_extension, "%s.%s.nfa", data.file_name.c_str(), sc.name);
			
			char log_file_name[100];
			sprintf(log_file_name, "%s.dot", log_file_name_without_extension);
			log.open(log_file_name);
			
		//	log << "NFA for start condition " << sc.name << "\n\n";
		//	sc.nfa.print(log);
			
			log << "\n";
			log << "/* An NFA created by Dolphin. */\n\n";
			print_dot_message(log_file_name_without_extension, log);
			log << "\n// NFA for start condition " << sc.name << "\n\n";
			sc.nfa.print_in_dot_format(log);
		}
		if(i==0 && data.variables.dump_nfa_to_file && data.start_conditions.size()==1)
		{
			ofstream log;
			char log_file_name_without_extension[100];
			sprintf(log_file_name_without_extension, "%s.nfa", data.file_name.c_str());
			
			char log_file_name[100];
			sprintf(log_file_name, "%s.dot", log_file_name_without_extension);
			log.open(log_file_name);
			
		//	log << "NFA for start condition " << sc.name << "\n\n";
		//	sc.nfa.print(log);
			
			log << "\n";
			log << "/* An NFA created by Dolphin. */\n\n";
			print_dot_message(log_file_name_without_extension, log);
			sc.nfa.print_in_dot_format(log);
		}
	}
	
	cout << number_of_states_in_nfas_for_start_conditions << " states in ";
	if(data.variables.start_conditions_enabled)
		cout << data.start_conditions.size() << " NFAs for start conditions.\n";
	else
		cout << "NFA.\n";
	
	return true;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情伊人五月天久久综合| 一区二区欧美国产| 综合欧美一区二区三区| 日韩电影在线观看一区| 国产91丝袜在线播放| 欧美一区二区视频观看视频| 国产精品久久久久久久蜜臀| 狠狠色狠狠色综合| 欧美日韩国产免费一区二区 | 国产三级久久久| 一区二区免费看| 高清不卡一区二区| 久久这里只有精品首页| 日韩和欧美的一区| 欧美午夜一区二区| 亚洲男人的天堂av| 亚洲日本va在线观看| 亚洲综合免费观看高清完整版在线| 午夜精品久久久久久久99樱桃| 亚洲麻豆国产自偷在线| 国产精品一二三四区| 日韩一区二区三区在线视频| 亚洲亚洲人成综合网络| 91欧美一区二区| 日韩码欧中文字| 成人av午夜电影| 国产精品萝li| 99在线热播精品免费| 国产精品毛片无遮挡高清| 国产精品911| 久久精品人人做人人爽97| 韩国精品主播一区二区在线观看| 日韩欧美激情四射| 久久99国产精品免费网站| 日韩女优制服丝袜电影| 久久99久久精品欧美| 日韩精品自拍偷拍| 精品亚洲porn| 国产亚洲精品aa午夜观看| 国产乱色国产精品免费视频| 久久久一区二区三区捆绑**| 国产盗摄女厕一区二区三区| 日本一区二区电影| 成人动漫在线一区| 亚洲视频资源在线| 色88888久久久久久影院野外| 亚洲精品欧美二区三区中文字幕| 色哟哟一区二区三区| 亚洲精品视频一区| 在线91免费看| 国产一区二区剧情av在线| 国产日本欧洲亚洲| 色乱码一区二区三区88 | 在线亚洲一区二区| 亚洲午夜免费视频| 欧美一区二区三区小说| 激情五月婷婷综合| 国产精品人成在线观看免费| 91久久线看在观草草青青| 首页国产丝袜综合| 久久亚洲免费视频| 91偷拍与自偷拍精品| 视频在线在亚洲| 久久久久国产精品人| 色婷婷综合久久久久中文一区二区 | 91久久香蕉国产日韩欧美9色| 性欧美大战久久久久久久久| 精品国产伦一区二区三区观看体验 | 久久女同性恋中文字幕| 99r国产精品| 久久精品国产一区二区| 日韩美女啊v在线免费观看| 91精品国产综合久久香蕉麻豆| 国产乱人伦偷精品视频不卡| 亚洲国产人成综合网站| 久久综合久色欧美综合狠狠| 欧美图片一区二区三区| 久久草av在线| 亚洲一区二区三区小说| 久久青草欧美一区二区三区| 欧美三级乱人伦电影| 丁香天五香天堂综合| 日韩精品成人一区二区在线| 国产精品乱码一区二区三区软件| 精品99999| 成人性视频免费网站| 91精品视频网| 成人动漫一区二区| 蜜臀av性久久久久av蜜臀妖精 | 色哟哟一区二区三区| 狠狠色狠狠色综合系列| 日韩精品免费专区| 亚洲一区二区三区视频在线 | 6080国产精品一区二区| 91香蕉视频在线| 国产精品小仙女| 日韩电影在线观看一区| 亚洲一区二区三区中文字幕| 国产精品国产三级国产aⅴ中文| 精品国产伦一区二区三区免费| 欧美美女网站色| 91免费观看国产| av中文字幕一区| 成人午夜电影小说| 国产高清一区日本| 国产一区二区福利视频| 韩国三级在线一区| 激情国产一区二区 | 亚洲国产视频网站| 一区二区三区四区蜜桃| 自拍偷拍亚洲激情| 亚洲女性喷水在线观看一区| 国产精品区一区二区三| 亚洲国产精品传媒在线观看| 久久久亚洲午夜电影| 精品国产123| 久久久久久久久伊人| 久久久精品欧美丰满| 国产亚洲欧美中文| 国产欧美日韩另类一区| 中文幕一区二区三区久久蜜桃| 国产日产欧美一区二区视频| 国产精品丝袜久久久久久app| 国产亚洲精品资源在线26u| 欧美国产日韩亚洲一区| 国产精品无人区| 亚洲欧洲中文日韩久久av乱码| 亚洲精品国久久99热| 亚洲精品成a人| 日韩制服丝袜av| 久久精品免费观看| 国产mv日韩mv欧美| 99精品视频在线播放观看| 在线观看精品一区| 7777精品伊人久久久大香线蕉的 | 在线观看免费一区| 91精品国产综合久久精品| 日韩一级黄色大片| 久久久久久久久免费| 国产精品国产a| 亚洲成a人v欧美综合天堂下载| 免费观看在线综合| 国产精品99久久久| 91久久精品午夜一区二区| 8v天堂国产在线一区二区| 久久你懂得1024| 亚洲自拍偷拍九九九| 美女视频免费一区| av动漫一区二区| 欧美一区二区视频在线观看 | 日韩一区二区三区电影| 国产女主播视频一区二区| 亚洲日本在线视频观看| 免费看黄色91| 色播五月激情综合网| 欧美不卡视频一区| 亚洲三级小视频| 精品亚洲欧美一区| 欧美偷拍一区二区| 中文字幕欧美日韩一区| 日本不卡一区二区三区高清视频| 国产成a人亚洲精| 欧美放荡的少妇| 国产精品美女久久久久久久 | 国产老女人精品毛片久久| 在线观看日产精品| 亚洲国产精品av| 精东粉嫩av免费一区二区三区| 日本韩国欧美一区| 欧美激情一区三区| 久久99久久久久| 欧美无乱码久久久免费午夜一区| 久久精品免视看| 久久精品噜噜噜成人av农村| 欧美色电影在线| 综合久久久久久久| 成人性生交大片免费看在线播放| 日韩亚洲欧美在线| 亚洲成人第一页| 色88888久久久久久影院野外| 国产三级一区二区| 精品一区精品二区高清| 欧美日韩亚洲丝袜制服| 综合久久给合久久狠狠狠97色| 国产乱人伦偷精品视频免下载| 欧美一区二区三区公司| 亚洲高清三级视频| 欧美在线观看视频一区二区| 国产精品动漫网站| av亚洲产国偷v产偷v自拍| 国产婷婷精品av在线| 久国产精品韩国三级视频| 日韩一区二区三区视频| 天天av天天翘天天综合网| 欧美日韩国产免费一区二区| 亚洲国产cao| 91精品在线观看入口| 天堂一区二区在线免费观看| 欧美高清视频www夜色资源网| 亚洲高清三级视频|