Documente Academic
Documente Profesional
Documente Cultură
Program
execution begins and ends there.
//
// Author: Thomas Kim
// First Edit: Mar. 26, 2019
//
#include "pch.h"
auto nl = "\n";
auto nL2 = "\n\n";
std::string ruler("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"
"-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");
if (bRuler)
stream << ruler << ruler<<nl;
void test_dfa_example_2_4_page_50()
{
display_title("DFA, Deterministic Finite Automata Initialization"
"\n\t-How to initialize"
"\n\t-How to test ACCEPT",
"test_dfa_example_2_4_page_50()");
dfa.set_1_symbols(0, 1)
.set_2_start_accept_states('0', '0')
.set_3_transitions('2', '1', '3', '0', '0', '3', '1', '2');
symbols_t symbols{ 1, 1, 0, 1, 0, 1 };
void test_nfa_example_2_7_page_57()
{
display_title("NFA to DFA Compact Conversion"
"\n\t-How to convert NFA to DFA using Compact Conversion",
"test_nfa_example_2_7_page_57()");
nfa.set_1_symbols(0, 1)
.set_2_start_accept_states(0, 2)
.set_3_transitions({ {0, 1}, {0}, {}, {2}, {}, {} });
stream << "NFA converted to DFA with Compact ------ " << nL2;
void test_nfa_example_2_7_page_61_full_subset_construction()
{
display_title("NFA to DFA Conversion with Full Subset Construction",
"test_nfa_example_2_7_page_61_full_subset_construction()");
nfa.set_1_symbols(0, 1)
.set_2_start_accept_states(0, 2)
.set_3_transitions({ {0, 1}, {0}, {}, {2}, {}, {} });
stream << "NFA converted to DFA with Full Subset Construction -------- " <<
nL2;
void test_nfa_exercise_2_3_1_page_65()
{
display_title("NFA to DFA Conversion More Example",
"test_nfa_exercise_2_3_1_page_65()");
nfa.set_1_symbols(0, 1)
.set_2_start_accept_states('p', 's')
.set_3_transitions({ {'p', 'q'}, {'p'},
{'r'}, {'r'},
{'s'}, { },
{'s'}, {'s'} });
stream << "Converted to DFA with Full Subset Construction" << nL2;
stream << nfa.create_dfa(false) << nl;
stream << "Converted to DFA with Compact Subset Construction" << nL2;
stream << nfa.create_dfa() << nl;
}
void test_nfa_exercise_2_3_2_page_66()
{
display_title("NFA to DFA More Example",
"test_nfa_exercise_2_3_2_page_66()");
nfa.set_1_symbols(0, 1)
.set_2_start_accept_states('p', 'q', 's')
.set_3_transitions({ {'q', 's'}, {'q'},
{'r'}, {'q', 'r'},
{'s'}, {'p'},
{ }, {'p'} });
stream << "NFA to DFA Conversion - Full Subject Construction ------" << nL2;
stream << nfa.create_dfa(false) << nl;
void test_nfa_exercise_2_3_3_page_66()
{
display_title("NFA to DFA More Example",
"test_nfa_exercise_2_3_3_page_66()");
nfa.set_1_symbols(0, 1)
.set_2_start_accept_states('p', 's', 't')
.set_3_transitions({ {'p', 'q'}, {'p'},
{'r', 's'}, {'t'},
{'p', 'r'}, {'t'},
{ }, { },
{ }, { } });
stream << "NFA to DFA Conversion - Full Subject Construction ------" << nL2;
stream << nfa.create_dfa(false) << nl;
void test_dfa_minimization_Myhill_Nerode_Theorem()
{
display_title("Minimization of DFA - Myhill Nerode Theorem",
"test_dfa_minimization_Myhill_Nerode_Theorem()");
dfa.set_1_symbols(0, 1);
dfa.set_2_start_accept_states('A', 'C', 'D', 'E');
// DFA | 0 | 1 |
dfa.set_3_transitions( //======+=======+=======+=
'B', 'C', // ->A | B | C |
'A', 'D', // B | A | D |
'E', 'F', // *C | E | F |
'E', 'F', // *D | E | F |
'E', 'F', // *E | E | F |
'F', 'F'); // F | F | F |
//======+=======+=======+=
dfa.minimize_states();
void test_nfa_exercise_2_3_2_page_66_and_minimize_dfa()
{
display_title("NFA to DFA More Example"
"\n\t1. Create NFA"
"\n\t2. Convert NFA to DFA"
"\n\t3. Minimize DFA States",
"test_nfa_exercise_2_3_2_page_66_and_minimize_dfa()");
using symbol_t = int;
using state_t = char;
using nfa_t = tpf::NFA<symbol_t, state_t>;
nfa.set_1_symbols(0, 1)
.set_2_start_accept_states('p', 'q', 's')
.set_3_transitions({ {'q', 's'}, {'q'},
{'r'}, {'q', 'r'},
{'s'}, {'p'},
{ }, {'p'} });
stream << "NFA to DFA Conversion - Full Subject Construction ------" << nL2;
stream << nfa.create_dfa(false) << nl;
stream << "NFA to DFA Conversion, Before Minimized -------" << nL2;
auto dfa = nfa.create_dfa();
dfa.minimize_states();
stream << "NFA to DFA Conversion, After Minimized -------" << nL2;
stream << dfa << nl;
}
void test_all_examples()
{
test_dfa_example_2_4_page_50();
test_nfa_example_2_7_page_57();
test_nfa_example_2_7_page_61_full_subset_construction();
test_nfa_exercise_2_3_1_page_65();
test_nfa_exercise_2_3_2_page_66();
test_nfa_exercise_2_3_3_page_66();
test_dfa_minimization_Myhill_Nerode_Theorem();
test_nfa_exercise_2_3_2_page_66_and_minimize_dfa();
}
int main()
{
stream << std::boolalpha << nl;
test_all_examples();
//test_dfa_example_2_4_page_50();
//test_nfa_example_2_7_page_57();
//test_nfa_example_2_7_page_61_full_subset_construction();
//test_nfa_exercise_2_3_1_page_65();
//test_nfa_exercise_2_3_2_page_66();
//test_nfa_exercise_2_3_3_page_66();
//test_dfa_minimization_Myhill_Nerode_Theorem();
//test_nfa_exercise_2_3_2_page_66_and_minimize_dfa();
}