Advertisement
Tomki

RegExps

Mar 22nd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.60 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <deque>
  3. #include <iostream>
  4.  
  5. class Connection
  6. {
  7. private:
  8.     char symb;
  9.     int startState;
  10.     int finState;
  11. public:
  12.     Connection()
  13.     {
  14.         symb = NULL;
  15.         startState = -1;
  16.         finState = -1;
  17.     };
  18.     Connection(char s, int start, int fin)
  19.     {
  20.         symb = s;
  21.         startState = start;
  22.         finState = fin;
  23.     }
  24.     Connection(char s)
  25.     {
  26.         symb = s;
  27.         startState = -1;
  28.         finState = -1;
  29.     }
  30.     void setStState(int st)
  31.     {
  32.         startState = st;
  33.     }
  34.     void setFinState(int st)
  35.     {
  36.         finState = st;
  37.     }
  38.     void getInfo()
  39.     {
  40.         std::cout << startState << "---" << symb << "-->" << finState << std::endl;
  41.     }
  42.     int getFinState()
  43.     {
  44.         return finState;
  45.     }
  46.     int getStartState()
  47.     {
  48.         return startState;
  49.     }
  50. };
  51.  
  52. void patchDot(Connection obj1, Connection& obj2)
  53. {
  54.     obj2.setStState(obj1.getFinState());
  55.     obj2.setFinState(obj1.getFinState() + 1);
  56. }
  57.  
  58. void patchStick(Connection obj1, Connection& obj2)
  59. {
  60.     obj2.setStState(obj1.getStartState());
  61.     obj2.setFinState(obj1.getFinState());
  62. }
  63.  
  64. void Star(Connection& obj)
  65. {
  66.     obj.setFinState(obj.getStartState());
  67. }
  68.  
  69. int main()
  70. {
  71.     char *txt = new char[255];
  72.     int counter = 0;
  73.     int i = 0;
  74.  
  75.     while (std::cin >> txt[i])
  76.         i++;
  77.     txt[i] = '\0';
  78.     std::cout << std::endl;
  79.     if (txt[0] == '\0')
  80.     {
  81.         std::cout << "String is empty" << std::endl;
  82.         return 0;
  83.     }
  84.  
  85.     std::deque<Connection> FSM;
  86.     i = 0;
  87.     while (txt[i] != '\0')
  88.     {
  89.         switch (txt[i])
  90.         {
  91.         default:
  92.         {
  93.             Connection *obj = new Connection(txt[i], counter, counter + 1);
  94.             counter++;
  95.             FSM.push_back(*obj);
  96.             delete obj;
  97.             i++;
  98.             break;
  99.         }
  100.         case '.':
  101.         {  
  102.             i++;
  103.             Connection *obj2 = new Connection(txt[i]);
  104.             patchDot(FSM[counter - 1], *obj2);
  105.             counter++;
  106.             FSM.push_back(*obj2);
  107.             delete obj2;
  108.             i++;
  109.             break;
  110.         }
  111.         case '|':
  112.         {
  113.             i++;
  114.             Connection *obj = new Connection(txt[i]);
  115.             patchStick(FSM[counter - 1], *obj);
  116.             counter++;
  117.             FSM.push_back(*obj); delete obj;
  118.             i++;
  119.             break;
  120.         }
  121.         case '?':
  122.         {
  123.             Connection *obj = new Connection(' ');
  124.             patchStick(FSM[counter - 1], *obj);
  125.             counter++;
  126.             FSM.push_back(*obj); delete obj;
  127.             i++;
  128.             break;
  129.         }
  130.         case '*':
  131.         {
  132.             Connection *obj = new Connection(' ');
  133.             patchStick(FSM[counter - 1], *obj);
  134.             Star(FSM[counter - 1]);
  135.             FSM.push_back(*obj);
  136.             delete obj; i++; counter++;
  137.             break;
  138.         }
  139.         case '+':
  140.         {
  141.             Connection *obj = new Connection(' ');
  142.             Star(FSM[counter - 1]);
  143.             patchDot(FSM[counter - 1], *obj);
  144.             FSM.push_back(*obj);
  145.             delete obj; i++; counter++;
  146.             break;
  147.         }
  148.         }
  149.     }
  150.  
  151.  
  152.  
  153.     for (int i = 0; i < FSM.size(); i++)
  154.     {
  155.         FSM[i].getInfo();
  156.     }
  157.  
  158.     return 0;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement