📄 run.cpp
字号:
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("0");
sample.rbegin()->push_back("q3");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("L");
sample.rbegin()->push_back("0");
sample.rbegin()->push_back("N");
sample.push_back(vector<string>());
sample.rbegin()->push_back("q4");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("q3");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("L");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("N");
sample.push_back(vector<string>());
sample.rbegin()->push_back("q4");
sample.rbegin()->push_back("0");
sample.rbegin()->push_back("b");
sample.rbegin()->push_back("q5");
sample.rbegin()->push_back("0");
sample.rbegin()->push_back("N");
sample.rbegin()->push_back("b");
sample.rbegin()->push_back("N");
sample.push_back(vector<string>());
sample.rbegin()->push_back("q4");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("b");
sample.rbegin()->push_back("q5");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("N");
sample.rbegin()->push_back("b");
sample.rbegin()->push_back("N");
cout << endl;
cout << space3
<< string (setw10, '=')
<< " "
<< text1
<< " "
<< string (setw10, '=')
<< endl;
cout << space3
<< string (setw12, '-')
<< " "
<< text2
<< " "
<< string (setw12, '-')
<< endl;
for (size_t i = 0; i < sample.size(); i++)
{
copy (sample[i].begin(), sample[i].end(), ostream_iterator<string> (cout, " "));
cout << endl;
}
cout << space3 << string (setw10 + 1 + text1.size() + 1 + setw10, '=') << endl;
}
// =========
void Run::show_input_words_file_sample_S ()
{
const string text1("Input words file sample");
const string text2("Number of tapes = 2");
vector<vector<string> > sample;
sample.push_back(vector<string>());
sample.rbegin()->push_back("0");
sample.rbegin()->push_back("1");
sample.rbegin()->push_back("0");
sample.push_back(vector<string>());
sample.rbegin()->push_back("b");
cout << endl;
cout << space3
<< string (setw10, '=')
<< " "
<< text1
<< " "
<< string (setw10, '=')
<< endl;
cout << space3
<< string (setw12, '-')
<< " "
<< text2
<< " "
<< string (setw12, '-')
<< endl;
for (size_t i = 0; i < sample.size(); i++)
{
copy (sample[i].begin(), sample[i].end(), ostream_iterator<string> (cout, " "));
cout << endl;
}
cout << space3 << string (setw10 + 1 + text1.size() + 1 + setw10, '=') << endl;
}
// =========
void Run::show_metafile_content_S ()
{
size_t text_setw = 0;
const string text1 ("Number of tapes");
const string text2 ("States file name");
const string text3 ("Alphabet file name");
const string text4 ("Transitions file name");
const string text5 ("Input words files names");
const string text6 ("Description file name");
text_setw = MAX_VALUE (text_setw, text1.size());
text_setw = MAX_VALUE (text_setw, text2.size());
text_setw = MAX_VALUE (text_setw, text3.size());
text_setw = MAX_VALUE (text_setw, text4.size());
text_setw = MAX_VALUE (text_setw, text5.size());
text_setw = MAX_VALUE (text_setw, text6.size());
cout << space3 << string (setw10, '=') << " Data selected from Metafile " << metafile_name_s << " " << string (setw10, '=') << endl;
for (size_t i = 0; i < metafile_data_s.size(); i++)
{
cout << space5 << string (setw10, '-') << " Turing Machine# " << (i + 1) << " " << string (setw10, '-') << endl;
cout << space6 << setw(text_setw) << left << text6.c_str() << " : " << metafile_data_s[i][METAFILE_FIELD__DESCR_FILE_NAME] << endl;
cout << space6 << setw(text_setw) << left << text1.c_str() << " : " << metafile_data_s[i][METAFILE_FIELD__NUMBER_OF_TAPES] << endl;
cout << space6 << setw(text_setw) << left << text2.c_str() << " : " << metafile_data_s[i][METAFILE_FIELD__STATES_FILE_NAME] << endl;
cout << space6 << setw(text_setw) << left << text3.c_str() << " : " << metafile_data_s[i][METAFILE_FIELD__ALPHABET_FILE_NAME] << endl;
cout << space6 << setw(text_setw) << left << text4.c_str() << " : " << metafile_data_s[i][METAFILE_FIELD__TRANSITIONS_FILE_NAME] << endl;
cout << space6 << setw(text_setw) << left << text5.c_str() << " : ";
copy (metafile_data_s[i].begin() + METAFILE_FIELD__INPUT_WORDS_FILE1_NAME, metafile_data_s[i].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << endl;
}
} // show_metafile_content_S
// =========
void Run::show_alphabet_file_content () const
{
size_t text_setw = 0;
const string text1 ("Empty state");
const string text2 ("Internal symbols");
const string text3 ("Input symbols");
text_setw = MAX_VALUE (text_setw, text1.size());
text_setw = MAX_VALUE (text_setw, text2.size());
text_setw = MAX_VALUE (text_setw, text3.size());
//cout << space3 << string (setw10, '=') << " INFO selected from Alphabet file " << alphabet_file_name_ << " " << string (setw10, '=') << endl;
cout << space6 << setw(text_setw) << left << text1.c_str() << " : ";
copy (alphabet_file_data_[ALPHABET_FILE_ROW__EMPTY_SYMBOLS].begin(), alphabet_file_data_[ALPHABET_FILE_ROW__EMPTY_SYMBOLS].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << space6 << setw(text_setw) << left << text2.c_str() << " : ";
copy (alphabet_file_data_[ALPHABET_FILE_ROW__INTERNAL_SYMBOLS].begin(), alphabet_file_data_[ALPHABET_FILE_ROW__INTERNAL_SYMBOLS].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << space6 << setw(text_setw) << left << text3.c_str() << " : ";
copy (alphabet_file_data_[ALPHABET_FILE_ROW__INPUT_SYMBOLS].begin(), alphabet_file_data_[ALPHABET_FILE_ROW__INPUT_SYMBOLS].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << endl;
} // show_alphabet_file_content
// =========
void Run::show_descr_file_content () const
{
for (size_t i = 0; i < descr_file_data_.size(); i++)
{
cout << space6;
copy (descr_file_data_[i].begin(), descr_file_data_[i].end(), ostream_iterator<string> (cout, " "));
cout << endl;
}
cout << endl;
} // show_descr_file_content
// =========
void Run::show_states_file_content () const
{
size_t text_setw = 0;
const string text1 ("Initial state");
const string text2 ("Halting state");
const string text3 ("Internal states");
text_setw = MAX_VALUE (text_setw, text1.size());
text_setw = MAX_VALUE (text_setw, text2.size());
text_setw = MAX_VALUE (text_setw, text3.size());
//cout << space3 << string (setw10, '=') << " INFO selected from States file " << states_file_name_ << " " << string (setw10, '=') << endl;
cout << space6 << setw(text_setw) << left << text1.c_str() << " : ";
copy (states_file_data_[STATES_FILE_ROW__INITIAL_STATES].begin(), states_file_data_[STATES_FILE_ROW__INITIAL_STATES].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << space6 << setw(text_setw) << left << text2.c_str() << " : ";
copy (states_file_data_[STATES_FILE_ROW__HALTING_STATES].begin(), states_file_data_[STATES_FILE_ROW__HALTING_STATES].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << space6 << setw(text_setw) << left << text3.c_str() << " : ";
copy (states_file_data_[STATES_FILE_ROW__INTERNAL_STATES].begin(), states_file_data_[STATES_FILE_ROW__INTERNAL_STATES].end(), ostream_iterator<string> (cout, " "));
cout << endl;
cout << endl;
} // show_states_file_content
// =========
void Run::show_transitions_file_content () const
{
for (size_t i = 0; i < transitions_file_data_.size(); i++)
{
//cout << space6 << "Row#" << setw(4) << right << i << " : ";
cout << space6 << "Rule" << " : ";
copy (transitions_file_data_[i].begin(), transitions_file_data_[i].end(), ostream_iterator<string> (cout, " "));
cout << endl;
}
cout << endl;
} // show_transitions_file_content
// =========
void Run::show_input_words_files_content () const
{
for (size_t i = 0; i < input_words_files_data_.size(); i++)
{
cout << space6 << "Input words --> Set#" << setw(3) << (i + 1) << endl;
for (size_t j = 0; j < input_words_files_data_[i].size(); j++)
{
cout << space9 << "Tape#" << setw(3) << j << " : ";
copy (input_words_files_data_[i][j].begin(), input_words_files_data_[i][j].end(), ostream_iterator<symbol_t> (cout, " "));
cout << endl;
}
cout << endl;
}
} // show_input_words_files_content
// =========
void Run::invoke_turing_machine_S (
size_t serial_number_i,
size_t number_of_tapes_i,
const string& descr_file_name_i,
const string& states_file_name_i,
const string& alphabet_file_name_i,
const string& transitions_file_name_i,
const vector<string>& input_words_files_names_i
)
{
ostringstream oss1, oss2;
cout << endl;
cout << endl;
cout << endl;
cout << endl;
oss1 << space5
<< string (setw10, '#')
<< " Turing Machine# "
<< serial_number_i
<< " : ";
oss2 << " "
<< string (setw10, '#');
cout << oss1.str() << "BEGIN" << oss2.str() << endl;
Run run_inst(
serial_number_i,
number_of_tapes_i,
descr_file_name_i,
states_file_name_i,
alphabet_file_name_i,
transitions_file_name_i,
input_words_files_names_i
);
if (!run_inst.check_results_)
{
cout << space5
<< "---> "
<< "Invalid Data !!!"
<< endl;
}
cout << endl;
cout << endl;
cout << oss1.str() << " END " << oss2.str() << endl;
} // invoke_turing_machine_S
// =========
void Run::show_usage_S (const string& exe_name_i)
{
cout << "\tUSAGE : "
<< exe_name_i
<< " [ metafile-name : Default = "
<< DEFAULT_METAFILE
<< " ]"
<< endl;
cout << "\t : "
<< exe_name_i
<< " [ ";
for (size_t i = 0; i < help_request_keys_s.size(); i++)
{
if (i) cout << " | ";
cout << help_request_keys_s[i];
}
cout << " ]" << endl;
cout << endl;
cout << "\tEXAMPLES : " << exe_name_i << endl;
cout << "\t : " << exe_name_i << " abcd.txt" << endl;
for (size_t i = 0; i < help_request_keys_s.size(); i++)
{
cout << "\t : " << exe_name_i << " " << help_request_keys_s[i] << endl;
}
}
// =========
void Run::show_help_S (const string& exe_name_i)
{
show_usage_S(exe_name_i);
cout << endl;
show_metafile_structure_S ();
cout << endl;
show_descr_file_structure_S ();
cout << endl;
show_states_file_structure_S ();
cout << endl;
show_alphabet_file_structure_S ();
cout << endl;
show_transitions_file_structure_S ();
cout << endl;
show_input_words_file_structure_S ();
cout << endl;
show_sample_S();
}
// =========
void Run::show_sample_S ()
{
cout << endl << endl;
show_metafile_sample_S ();
cout << endl;
cout << endl;
const string prefix1 (9, ' ');
const string prefix2 (5, ' ');
const string l_border ("/// ---");
const string r_border ("--- \\\\\\");
const string text1 ("Sample of Turing Machine Definition");
cout << ""
<< prefix2 << l_border << " " << text1 << " : " << "BEGIN" << " " << r_border
<< endl;
cout << ""
<< prefix1 << "A Turing Machine example (Recognition of Palindromes)"
<< endl
<< prefix1 << "* from \"The Design and Analysis of Computer Algorithms [1976]\""
<< endl
<< prefix1 << "* by A.V.Aho, J.E.Hopcroft, J.D.Ullman"
<< endl
<< prefix1 << "* --> See examples 1.8, 1.9"
<< endl
<< prefix1 << "is used in samples below"
<< endl;
show_descr_file_sample_S ();
cout << endl;
show_states_file_sample_S ();
cout << endl;
show_alphabet_file_sample_S ();
cout << endl;
show_transitions_file_sample_S ();
cout << endl;
show_input_words_file_sample_S ();
cout << endl;
cout << ""
<< prefix2 << l_border << " " << text1 << " : " << "END" << " " << r_border
<< endl;
cout << endl;
}
// =========
void Run::run (uint argc, char** argv)
{
cout << endl;
cout << endl;
cout << "\t---> YOUR COMMAND LINE : ";
for (uint i = 0; i < argc; i++)
{
cout << argv[i] << " ";
}
cout << endl;
cout << endl;
assert (!help_request_keys_s.empty());
if (argc >= 2)
{
if (find (help_request_keys_s.begin(), help_request_keys_s.end(), string(argv[1])) != help_request_keys_s.end())
{
show_help_S(argv[0]);
return;
}
}
if (argc == 1)
{
cout << endl;
show_usage_S (argv[0]);
cout << endl;
cout << endl;
}
// ---------------------------
if (!((argc < 2) ? read_metafile_S() : read_metafile_S (argv[1])))
{
cout << endl;
FATAL_MSG ("Unable to select data from metafile");
cout << endl;
show_metafile_structure_S ();
show_metafile_sample_S ();
cout << endl;
return ;
}
cout << endl;
size_t number_of_tapes;
for (size_t i = 0; i < metafile_data_s.size(); i++)
{
vector<string> input_words_files_names;
number_of_tapes = atoi (metafile_data_s[i][METAFILE_FIELD__NUMBER_OF_TAPES].c_str());
for (size_t j = METAFILE_FIELD__INPUT_WORDS_FILE1_NAME;
j < metafile_data_s[i].size();
j++
)
{
input_words_files_names.push_back (metafile_data_s[i][j]);
}
//copy (metafile_data_s[i].begin() + METAFILE_FIELD__INPUT_WORDS_FILE1_NAME, metafile_data_s[i].end(), input_words_files_names.begin());
//assert (number_of_tapes != 0);
invoke_turing_machine_S (
(i + 1),
number_of_tapes,
metafile_data_s[i][METAFILE_FIELD__DESCR_FILE_NAME],
metafile_data_s[i][METAFILE_FIELD__STATES_FILE_NAME],
metafile_data_s[i][METAFILE_FIELD__ALPHABET_FILE_NAME],
metafile_data_s[i][METAFILE_FIELD__TRANSITIONS_FILE_NAME],
input_words_files_names
);
}
} // run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -