Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MPAuto20.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <deque>
- #include <string>
- #include <iostream>
- #include <vector>
- using namespace std;
- class nonPrimitivePA
- {
- private:
- int state;
- vector<char> memory;
- deque<char> output;
- public:
- nonPrimitivePA()
- {
- state = 1;
- memory.empty();
- output.empty();
- }
- void push(char let)
- {
- memory.push_back(let);
- }
- int parse(deque<char>& txt)
- {
- while (txt.size() != 0)
- {
- if (state == 1)
- {
- if (memory.empty())
- {
- switch (txt[0])
- {
- default: break;
- case '0': push('A'), txt.pop_front(); break;
- case '1': return 0;
- case '\0': return 0;
- }
- }
- else if (memory.back() == 'A')
- {
- switch (txt[0])
- {
- default: break;
- case '0': memory.pop_back(), push('B'), txt.pop_front(); break;
- case '1': return 0;
- case '\0': return 0;
- }
- }
- else if (memory.back() == 'B')
- {
- switch (txt[0])
- {
- default: break;
- case '0': push('A'), txt.pop_front(); break;
- case '1': state = 2; break;
- case '\0': return 0;
- }
- }
- }
- else if (state == 2)
- {
- if (memory.empty())
- {
- switch (txt[0])
- {
- default: break;
- case '0': return 0;
- case '1': state = 3; break;
- case '\0': return 0;
- }
- }
- else if (memory.back() == 'C')
- {
- switch (txt[0])
- {
- default: break;
- case '0': return 0;
- case '1': memory.pop_back(), push('D'), txt.pop_front(); break;
- case '\0': return 0;
- }
- }
- else if (memory.back() == 'D')
- {
- switch (txt[0])
- {
- default: break;
- case '0': return 0;
- case '1': memory.pop_back(), txt.pop_front(), output.push_front('1'); break;
- case '\0': return 0;
- }
- }
- else if (memory.back() == 'B')
- {
- switch (txt[0])
- {
- default: break;
- case '0': return 0;
- case '1': memory.pop_back(), push('C'), txt.pop_front(); break;
- case '\0': return 0;
- }
- }
- }
- else if (state == 3)
- {
- switch (txt[0])
- {
- default: break;
- case '0': return 0;
- case '1': output.push_front('0'), txt.pop_front(); break;
- case '\0': return 1;
- }
- }
- }
- }
- void getResult()
- {
- for (int i = 0; i < output.size(); i++)
- {
- cout << output[i];
- }
- }
- };
- int main()
- {
- deque<char> input;
- string txt;
- cin >> txt;
- int i = 0;
- while (txt[i] != '\0')
- {
- input.push_back(txt[i]);
- i++;
- }
- input.push_back(txt[i]);
- nonPrimitivePA *obj = new nonPrimitivePA();
- if (obj->parse(input))
- obj->getResult();
- else
- cout << "Incorrect\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment