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); }
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; }