示例#1
0
void RegExpTest::test6()	{
	RegExp<char> regexp;
	regexp.evaluate("a.a.b");
	std::cout << "test6 dfa:\n" << regexp.dfa() << std::endl;
	
	Nfa<char> nfa1 = to_nfa(regexp.dfa());
	std::cout << "test6 nfa1:\n" << nfa1 << std::endl;
	
	Nfa<char> nfa2 = nfa_reverse(nfa1);
	std::cout << "test6 nfa2:\n" << nfa2 << std::endl;

	Dfa<char> dfa2 = normalize(minimize(to_dfa(nfa2)));
	std::cout << "test6 dfa2:\n" << dfa2 << std::endl;
	
	CHECK(dfa2, s_, false);
	CHECK(dfa2, s_a, false);
	CHECK(dfa2, s_b, false);
	CHECK(dfa2, s_aa, false);
	CHECK(dfa2, s_bb, false);
	CHECK(dfa2, s_baa, true);


	

}
示例#2
0
文件: sys.c 项目: FunnyLanguage/funny
String eval_sys(Mapping *m, Statement *source, Queue *repQueue) {
	String prepare = copy_string(m->sys->prepare);
	String eval = copy_string(m->sys->eval);
	Mapping *mapping = NULL;

	String* array = NULL;
	String* arraySource = NULL;
	String* arrayTarget = NULL;

	String prepareSource;
	String prepareTarget;
	String sourceFuncMacro;
	String sourceMacro;
	String targetFuncMacro;
	String targetMacro;

	if (!equals_string(prepare, "NIL")) {
		mapping = alloc_mapping();
		mapping->sys = NULL;
		if (strcmp(m->sys->name, DEF_MACRO) == 0) {
			mapping->isMacro = TRUE;
		} else {
			mapping->isMacro = FALSE;
		}

		array = split_string_once(prepare, '>');
		prepareSource = array[0];
		prepareTarget = array[1];

		arraySource = split_string_once(prepareSource, ',');
		sourceFuncMacro = trim_string(arraySource[0]);
		sourceMacro = trim_string(arraySource[1]);

		mapping->source = parse_macro(repQueue, sourceMacro);
		mapping->sourceFunc = parse_macro(repQueue, sourceFuncMacro);
		mapping->sourceStatement = parse(mapping->source);
		mapping->starter = to_dfa(mapping->sourceStatement);

		arrayTarget = split_string_once(prepareTarget, ',');
		targetFuncMacro = trim_string(arrayTarget[0]);
		targetMacro = trim_string(arrayTarget[1]);

		mapping->target = parse_macro(repQueue, targetMacro);
		mapping->targetFunc = parse_macro(repQueue, targetFuncMacro);
		mapping->targetStatement = parse(mapping->target);

		//enqueue(get_mappings(), mapping);
		add_mapping_to_trie(mapping);
	}

	if (!equals_string(eval, "NIL")) {
		return parse_macro(repQueue, eval);
	} else {
		return "";
	}
}
automata* nfa_to_dfa::get_dfa(automata* NFA){

	current_nfa = NFA;

	unminimized_dfa = to_dfa(current_nfa);

	//cout << unminimizedDFA->countStates() << endl;

	minimized_dfa = minimze_dfa(unminimized_dfa);
	minimized_dfa->print_transition_table("table.txt");

    //cout << minimizedDFA->countStates() << endl;

	return minimized_dfa;
}