Tomki

NonPrimitivePDA

Mar 22nd, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.75 KB | None | 0 0
  1. // MPAuto20.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <deque>
  6. #include <string>
  7. #include <iostream>
  8. #include <vector>
  9.  
  10. using namespace std;
  11.  
  12. class nonPrimitivePA
  13. {
  14. private:
  15.     int state;
  16.     vector<char> memory;
  17.     deque<char> output;
  18. public:
  19.     nonPrimitivePA()
  20.     {
  21.         state = 1;
  22.         memory.empty();
  23.         output.empty();
  24.     }
  25.     void push(char let)
  26.     {
  27.         memory.push_back(let);
  28.     }
  29.     int parse(deque<char>& txt)
  30.     {
  31.         while (txt.size() != 0)
  32.         {
  33.             if (state == 1)
  34.             {
  35.                 if (memory.empty())
  36.                 {
  37.                     switch (txt[0])
  38.                     {
  39.                     default: break;
  40.                     case '0': push('A'), txt.pop_front(); break;
  41.                     case '1': return 0;
  42.                     case '\0': return 0;
  43.                     }
  44.                 }
  45.                 else if (memory.back() == 'A')
  46.                 {
  47.                     switch (txt[0])
  48.                     {
  49.                     default: break;
  50.                     case '0': memory.pop_back(), push('B'), txt.pop_front(); break;
  51.                     case '1': return 0;
  52.                     case '\0': return 0;
  53.                     }
  54.                 }
  55.                 else if (memory.back() == 'B')
  56.                 {
  57.                     switch (txt[0])
  58.                     {
  59.                     default: break;
  60.                     case '0': push('A'), txt.pop_front(); break;
  61.                     case '1': state = 2; break;
  62.                     case '\0': return 0;
  63.                     }
  64.                 }
  65.             }
  66.             else if (state == 2)
  67.             {
  68.                 if (memory.empty())
  69.                 {
  70.                     switch (txt[0])
  71.                     {
  72.                     default: break;
  73.                     case '0': return 0;
  74.                     case '1': state = 3; break;
  75.                     case '\0': return 0;
  76.                     }
  77.                 }
  78.                 else if (memory.back() == 'C')
  79.                 {
  80.                     switch (txt[0])
  81.                     {
  82.                     default: break;
  83.                     case '0': return 0;
  84.                     case '1': memory.pop_back(), push('D'), txt.pop_front(); break;
  85.                     case '\0': return 0;
  86.                     }
  87.                 }
  88.                 else if (memory.back() == 'D')
  89.                 {
  90.                     switch (txt[0])
  91.                     {
  92.                     default: break;
  93.                     case '0': return 0;
  94.                     case '1': memory.pop_back(), txt.pop_front(), output.push_front('1'); break;
  95.                     case '\0': return 0;
  96.                     }
  97.                 }
  98.                 else if (memory.back() == 'B')
  99.                 {
  100.                     switch (txt[0])
  101.                     {
  102.                     default: break;
  103.                     case '0': return 0;
  104.                     case '1': memory.pop_back(), push('C'), txt.pop_front(); break;
  105.                     case '\0': return 0;
  106.                     }
  107.                 }
  108.             }
  109.             else if (state == 3)
  110.             {
  111.                 switch (txt[0])
  112.                 {
  113.                 default: break;
  114.                 case '0': return 0;
  115.                 case '1': output.push_front('0'), txt.pop_front(); break;
  116.                 case '\0': return 1;
  117.                 }
  118.             }
  119.         }
  120.     }
  121.     void getResult()
  122.     {
  123.         for (int i = 0; i < output.size(); i++)
  124.         {
  125.             cout << output[i];
  126.         }
  127.     }
  128. };
  129.  
  130.  
  131. int main()
  132. {
  133.     deque<char> input;
  134.     string txt;
  135.     cin >> txt;
  136.     int i = 0;
  137.     while (txt[i] != '\0')
  138.     {
  139.         input.push_back(txt[i]);
  140.         i++;
  141.     }
  142.     input.push_back(txt[i]);
  143.  
  144.     nonPrimitivePA *obj = new nonPrimitivePA();
  145.     if (obj->parse(input))
  146.         obj->getResult();
  147.     else
  148.         cout << "Incorrect\n";
  149.  
  150.     return 0;
  151. }
Advertisement
Add Comment
Please, Sign In to add comment