Advertisement
JouJoy

Untitled

Dec 20th, 2020
659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. struct perem //список переменных
  6. {
  7.     char name;
  8.     int value;
  9.     perem* next;
  10. };
  11. perem* list;
  12. class Compile
  13. {
  14. private:
  15.     char name;
  16.     //perem* list;
  17.     bool analyze_ok;
  18.     bool memory_and_initial_ok;
  19.     bool calculate_ok;
  20.     ifstream in();
  21.     bool bukva(char x);
  22.     bool cif(char x);
  23.     bool oper(char x);
  24.     bool empty_list(perem* top);
  25.     void push(perem*& top, char x);
  26.     void show_list(perem* top);
  27.     //void show_list(perem*& top);
  28.     void show_list_and_value(perem* top);
  29.     //void show_list_and_value(perem*& top);
  30.     bool exist(perem* top, char x);
  31.     int convert_int(int* number);
  32.     void find_and_set_value(perem*& top, char x, int* numb);
  33.     //void find_and_set_value(perem* top, char x, int* numb);
  34.     void find_and_set_value1(perem*& top, char x, int numb);
  35.     //void find_and_set_value1(perem* top, char x, int numb);
  36.     int find_and_get_value(perem* top, char x);
  37.     int number(char x);
  38. public:
  39.     Compile();
  40.     void analyze();
  41.     void memory();
  42.     void compile();
  43.     void calculate();
  44. };
  45. int Compile::number(char x)
  46. {
  47.     if (x == '-') return -1;
  48.     if (x == '+') return 1;
  49.     if (x == '0') return 0;
  50.     if (x == '1') return 1;
  51.     if (x == '2') return 2;
  52.     if (x == '3') return 3;
  53.     if (x == '4') return 4;
  54.     if (x == '5') return 5;
  55.     if (x == '6') return 6;
  56.     if (x == '7') return 7;
  57.     if (x == '8') return 8;
  58.     if (x == '9') return 9;
  59. }
  60. bool Compile::bukva(char x) // Является ли символ буквой
  61. {
  62.     if ((x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z'))
  63.         return true;
  64.     return false;
  65. }
  66. bool Compile::cif(char x) //Является ли символ цифрой
  67. {
  68.     if ((x == '0') || (x == '1') || (x == '2') || (x == '3') || (x == '4') || (x == '5') || (x == '6') || (x == '7') || (x == '8') || (x == '9'))
  69.         return true;
  70.     return false;
  71. }
  72. bool Compile::oper(char x)
  73. {
  74.     if ((x == '*') || (x == '-') || (x == '+') || (x == '/'))
  75.         return true;
  76.     return false;
  77. }
  78. bool Compile::empty_list(perem* top)
  79. {
  80.     return top == NULL;
  81. }
  82. void Compile::push(perem*& top, char x)
  83. {
  84.  
  85.     perem* p;
  86.     p = new perem;
  87.     p->name = x;
  88.     p->next = top;
  89.     top = p;
  90. }
  91. void Compile::show_list(perem* top)
  92. {
  93.     perem* p;
  94.     p = top;
  95.     while (p)
  96.     {
  97.         cout << p->name << " ";
  98.         p = p->next;
  99.     }
  100.     cout << endl;
  101. }
  102. void Compile::show_list_and_value (perem* top)
  103. {
  104.     perem* p;
  105.     p = top;
  106.     while (p)
  107.     {
  108.         cout << p->name << " = ";
  109.         cout << p->value << endl;
  110.         p = p->next;
  111.     }
  112.     cout << endl;
  113. }
  114. bool Compile::exist(perem* top, char x)
  115. {
  116.     char prov;
  117.     prov = x;
  118.     perem* p = top;
  119.     while (p)
  120.     {
  121.         if (p->name == prov)
  122.             return true;
  123.         p = p->next;
  124.     }
  125.     return false;
  126. }
  127. int Compile::convert_int(int* number)
  128. {
  129.     int summ;
  130.     summ = number[1] * 10000 + number[2] * 1000 + number[3] * 100 + number[4] * 10 + number[5];
  131.     return summ * number[0];//определяет знак переменной
  132. }
  133. void Compile::find_and_set_value(perem*& top, char x, int*numb)
  134. {
  135.     char prov;
  136.     prov = x;
  137.     perem* p = top;
  138.     while (p)
  139.     {
  140.         if (p->name == prov)
  141.         {
  142.             p->value = convert_int(numb);
  143.         }
  144.         p = p->next;
  145.     }
  146. }
  147. void Compile::find_and_set_value1(perem*& top, char x, int numb)
  148. {
  149.     char prov;
  150.     prov = x;
  151.     perem* p = top;
  152.     while (p)
  153.     {
  154.         if (p->name == prov)
  155.         {
  156.             p->value = numb;
  157.         }
  158.         p = p->next;
  159.     }
  160. }
  161. int Compile::find_and_get_value (perem* top, char x)
  162. {
  163.     char prov;
  164.     prov = x;
  165.     perem* p = top;
  166.     while (p)
  167.     {
  168.         if (p->name == prov)
  169.         {
  170.             return p->value;
  171.         }
  172.         p = p->next;
  173.     }
  174. }
  175. Compile::Compile()
  176. {
  177. }
  178. void Compile::analyze()
  179. {
  180.     char x;
  181.     char a;
  182.     int i = 0;
  183.     int p = 5; //количество знаков
  184.     int pk = 0;//количество знаков на данный момент
  185.     int q = 1;//начальное состояние
  186.     int misstake=0;
  187.     int cifinch = 0;//количество цифр в числе
  188.     ifstream in("code.txt");
  189.     while ((in >> a) && q != 0)
  190.     {
  191.         i++;
  192.         x = a;
  193.         switch (q)
  194.         {
  195.         case 1:
  196.         {
  197.             if (bukva(x))
  198.             {
  199.                 q = 2;
  200.                 break;
  201.             }
  202.             else { cout << "Ошибка! Имя переменной должно быть буквой! Вместо " << i << " символа ожидалась буква." << endl; misstake++;  break; }
  203.         }
  204.         case 2:
  205.         {
  206.             if (x == ':')
  207.             {
  208.                 q = 3; break;
  209.             }
  210.             else { cout << "Синтаксическая ошибка! Вместо " << i << " символа ожидался символ :" << endl; misstake++; ; break; }
  211.         }
  212.         case 3:
  213.         {
  214.             pk = 0;
  215.             if (x == '=')
  216.             {
  217.                 q = 4; break;
  218.             }
  219.             else { cout << "Синтаксическая ошибка! Вместо " << i << " символа ожидался символ =" << endl; misstake++; break; }
  220.         }
  221.         case 4:
  222.         {
  223.             if (pk > p)
  224.             {
  225.                 cout << "Слишком много операторов в одном выражении. Место ошибки: " << i << " символ. Максимальное количество операторов: " << p << endl;
  226.                 q = 0; break;
  227.             }
  228.             cifinch = 0;
  229.             if (bukva(x))
  230.             {
  231.                 q = 5; break;
  232.             }
  233.             else if (x == '+' || x == '-')
  234.             {
  235.                 q = 7; break;
  236.             }
  237.             else { cout << "Синтаксическая ошибка! Вместо " << i << " символа ожидается переменная или знак +/-" << endl; misstake++; break; }
  238.         }
  239.         case 5:
  240.         {
  241.             if (x == ';')
  242.             {
  243.                 q = 6; break;
  244.             }
  245.             else if (oper(x))
  246.             {
  247.                 pk++;
  248.                 q = 4; break;
  249.             }
  250.             else { cout << "Синтаксическая ошибка! Вместо " << i << " символа ожидается ; для завершения операции, или оператор." << endl; misstake++; break; }
  251.         }
  252.         case 6:
  253.         {
  254.             if (x == ' ')
  255.             {
  256.                 q = 1; break;
  257.             }
  258.             else if (bukva(x))
  259.             {
  260.                 q = 2; break;
  261.             }
  262.             else { cout << "Синтаксическая ошибка! Вместо " << i << " символа ожидается пробел или переменная." << endl; misstake++; break; }
  263.         }
  264.         case 7:
  265.         {
  266.             if (cif(x) && cifinch < 5)
  267.             {
  268.                 cifinch++; q = 7; break;
  269.             }
  270.             else if (!cif(x) && cifinch < 5)
  271.             {
  272.                 cout << "Ошибка! Число должно состоять из 5 цифр, введено только " << cifinch << ". Добавьте цифры на место " << i << " символа." << endl;
  273.                 misstake++;
  274.                 break;
  275.             }
  276.             if (x == ';')
  277.             {
  278.                 q = 6; break;
  279.             }
  280.             else if (oper(x))
  281.             {
  282.                 pk++;
  283.                 q = 4; break;
  284.             }
  285.             else { cout << "Синтаксическая ошибка! Вместо " << i << " символа ожидается ; для завершения операции, или оператор." << endl; misstake++; break; }
  286.         }
  287.         default:break;
  288.         }
  289.     }
  290.     if (misstake > 0)
  291.     {
  292.         analyze_ok = false;
  293.         cout << "Всего в коде найдено " << misstake << " синтаксических(-е)(-ая) ошибок(-ки)(-ка).\n(Перечислены выше)" << endl;
  294.     }
  295.     else
  296.     {
  297.         analyze_ok = true;
  298.         cout << "Код программы соответствует синтаксису языка. Все хорошо." << endl;
  299.     }
  300.     in.close();
  301. }
  302. void Compile::memory()
  303. {
  304.     list = NULL;
  305.     ifstream in("code.txt");
  306.     char a;
  307.     char x;
  308.     int cifinch = 0;
  309.     int q = 1;
  310.     if (analyze_ok)
  311.     {
  312.         memory_and_initial_ok = false;
  313.         while (in >> a)
  314.         {
  315.             x = a;
  316.             switch (q)
  317.             {
  318.             case 1:
  319.             {
  320.                 if (bukva(x))
  321.                 {
  322.                     push(list, x);
  323.                     q = 2;
  324.                     break;
  325.                 }
  326.             }
  327.             case 2:
  328.             {
  329.                 if (x == ':')
  330.                 {
  331.                     q = 3; break;
  332.                 }
  333.             }
  334.             case 3:
  335.             {
  336.                 if (x == '=')
  337.                 {
  338.                     q = 4; break;
  339.                 }
  340.             }
  341.             case 4:
  342.             {
  343.                 cifinch = 0;
  344.                 if (bukva(x))
  345.                 {
  346.                     q = 5; break;
  347.                 }
  348.                 else if (x == '+' || x == '-')
  349.                 {
  350.                     q = 7; break;
  351.                 }
  352.             }
  353.             case 5:
  354.             {
  355.                 if (x == ';')
  356.                 {
  357.                     q = 6; break;
  358.                 }
  359.                 else if (oper(x))
  360.                 {
  361.                     q = 4; break;
  362.                 }
  363.             }
  364.             case 6:
  365.             {
  366.                 if (x == ' ')
  367.                 {
  368.                     q = 1; break;
  369.                 }
  370.                 else if (bukva(x))
  371.                 {
  372.                     push(list, x);
  373.                     q = 2; break;
  374.                 }
  375.             }
  376.             case 7:
  377.             {
  378.                 if (cif(x) && cifinch < 5)
  379.                 {
  380.                     cifinch++; q = 7; break;
  381.                 }
  382.                 if (x == ';')
  383.                 {
  384.                     q = 6; break;
  385.                 }
  386.                 else if (oper(x))
  387.                 {
  388.                     q = 4; break;
  389.                 }
  390.             }
  391.             default:break;
  392.             }
  393.         }
  394.         if (!empty_list(list))
  395.         {
  396.             cout << "Выделение памяти прошло успешно." << endl;
  397.             memory_and_initial_ok = true;
  398.             cout << "Список переменных:" << endl;
  399.             show_list(list);
  400.         }
  401.     }
  402.     in.close();
  403. }
  404. void Compile::calculate()
  405. {
  406.     if ((memory_and_initial_ok) && analyze_ok)
  407.     {
  408.         calculate_ok = false;
  409.         char a, x;
  410.         int p = 5; //количество знаков
  411.         int pk = 0;//количество знаков на данный момент
  412.         int q = 1;//начальное состояние
  413.         int misstake = 0;
  414.         int temp_value2;
  415.         char operat = '0';
  416.         char temp_name;//временное имя переменной
  417.         int temp_value1;
  418.         int temp_value[6];
  419.         int cifinch = 0;//количество цифр в числе
  420.         ifstream in("code.txt");
  421.         while (in >> a)
  422.         {
  423.             x = a;
  424.             switch (q)
  425.             {
  426.             case 1:
  427.             {
  428.                 if (bukva(x))
  429.                 {
  430.                     q = 2;
  431.                     temp_name = x;
  432.                     break;
  433.                 }
  434.             }
  435.             case 2:
  436.             {
  437.                 if (x == ':')
  438.                 {
  439.                     q = 3; break;
  440.                 }
  441.             }
  442.             case 3:
  443.             {
  444.                 pk = 0;
  445.                 if (x == '=')
  446.                 {
  447.                     q = 4; break;
  448.                 }
  449.             }
  450.             case 4:
  451.             {
  452.                 cifinch = 0;
  453.                 if (operat != '0')
  454.                 {
  455.                     if (pk > 1)
  456.                     {
  457.                         if (bukva(x))
  458.                         {
  459.                             if (exist(list, x))
  460.                             {
  461.                                 temp_value2 = find_and_get_value(list, x);
  462.                                 if (operat == '*')
  463.                                 {
  464.                                     operat = '0';
  465.                                     find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) * temp_value2);
  466.                                 }
  467.                                 if (operat == '-')
  468.                                 {
  469.                                     operat = '0';
  470.                                     find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) - temp_value2);
  471.                                 }
  472.                                 if (operat == '+')
  473.                                 {
  474.                                     operat = '0';
  475.                                     find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) + temp_value2);
  476.                                 }
  477.                                 if (operat == '/')
  478.                                 {
  479.                                     if (temp_value2 == 0)
  480.                                     {
  481.                                         cout << "ОБНАРУЖЕНО ДЕЛЕНИЕ НА НОЛЬ" << endl;
  482.                                         exit(1);
  483.                                     }
  484.                                     operat = '0';
  485.                                     find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) / temp_value2);
  486.                                 }
  487.                             }
  488.                             else
  489.                             {
  490.                                 cout << "Переменная " << x << " не инициализирована!" << endl;
  491.                                 misstake++;
  492.                             }
  493.                             q = 5; break;
  494.                         }
  495.                         else if (x == '+' || x == '-')
  496.                         {
  497.                             temp_value[0] = number(x);
  498.                             q = 7; break;
  499.                         }
  500.                     }
  501.                     if (bukva(x))
  502.                     {
  503.                         if (exist(list, x))
  504.                         {
  505.                             temp_value2 = find_and_get_value(list, x);
  506.                             if (operat == '*')
  507.                             {
  508.                                 operat = '0';
  509.                                 find_and_set_value1(list, temp_name, temp_value1 * temp_value2);
  510.                             }
  511.                             if (operat == '-')
  512.                             {
  513.                                 operat = '0';
  514.                                 find_and_set_value1(list, temp_name, temp_value1 - temp_value2);
  515.                             }
  516.                             if (operat == '+')
  517.                             {
  518.                                 operat = '0';
  519.                                 find_and_set_value1(list, temp_name, temp_value1 + temp_value2);
  520.                             }
  521.                             if (operat == '/')
  522.                             {
  523.                                 if (temp_value2 == 0)
  524.                                 {
  525.                                     cout << "ОБНАРУЖЕНО ДЕЛЕНИЕ НА НОЛЬ" << endl;
  526.                                     exit(1);
  527.                                 }
  528.                                 operat = '0';
  529.                                 find_and_set_value1(list, temp_name, temp_value1 / temp_value2);
  530.                             }
  531.                         }
  532.                         else
  533.                         {
  534.                             cout << "Переменная " << x << " не инициализирована!" << endl;
  535.                             misstake++;
  536.                         }
  537.                         q = 5; break;
  538.                     }
  539.                     else
  540.                     {
  541.                         temp_value[0] = number(x);
  542.                         q = 7; break;
  543.                     }
  544.                 }
  545.                 else if (bukva(x))
  546.                 {
  547.                     if (exist(list, x))
  548.                         temp_value1 = find_and_get_value(list, x);
  549.                     else
  550.                     {
  551.                         cout << "Переменная " << x << " не инициализирована!" << endl;
  552.                         misstake++;
  553.                     }
  554.                     q = 5; break;
  555.                 }
  556.                 else if (x == '+' || x == '-')
  557.                 {
  558.                     temp_value[0] = number(x);
  559.                     q = 7; break;
  560.                 }
  561.             }
  562.             case 5:
  563.             {
  564.                 operat = '0';
  565.                 if ((x == ';')&&pk==0)
  566.                 {
  567.                     find_and_set_value1(list, temp_name, temp_value1);
  568.                     q = 6; break;
  569.                 }
  570.                 if (x == ';')
  571.                 {
  572.                     q = 6; break;
  573.                 }
  574.                 else if (oper(x))
  575.                 {
  576.                     pk++;
  577.                     if (x == '*')
  578.                     {
  579.                         operat = '*';
  580.                     }
  581.                     if (x == '-')
  582.                     {
  583.                         operat = '-';
  584.                     }
  585.                     if (x == '+')
  586.                     {
  587.                         operat = '+';
  588.                     }
  589.                     if (x == '/')
  590.                     {
  591.                         operat = '/';
  592.                     }
  593.                     q = 4; break;
  594.                 }
  595.             }
  596.             case 6:
  597.             {
  598.                 //find_and_set_value1(list, temp_name, temp_value1);
  599.                 if (x == ' ')
  600.                 {
  601.                     q = 1; break;
  602.                 }
  603.                 else if (bukva(x))
  604.                 {
  605.                     temp_name = x;
  606.                     q = 2; break;
  607.                 }
  608.             }
  609.             case 7:
  610.             {
  611.                 if (pk > 1)
  612.                 {
  613.                     if (operat != '0')
  614.                     {
  615.  
  616.                         temp_value2 = convert_int(temp_value);
  617.                         if (cif(x) && cifinch < 5)
  618.                         {
  619.                             cifinch++;
  620.                             temp_value[cifinch] = number(x);
  621.                             q = 7; break;
  622.                         }
  623.                         if (operat == '*')
  624.                         {
  625.                             operat = '0';
  626.                             find_and_set_value1(list, temp_name, find_and_get_value(list,temp_name) * temp_value2);
  627.                            
  628.                         }
  629.                         if (operat == '-')
  630.                         {
  631.                             operat = '0';
  632.                             find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) - temp_value2);
  633.                         }
  634.                         if (operat == '+')
  635.                         {
  636.                             operat = '0';
  637.                             find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) + temp_value2);
  638.                         }
  639.                         if (operat == '/')
  640.                         {
  641.                             if (temp_value2 == 0)
  642.                             {
  643.                                 cout << "ОБНАРУЖЕНО ДЕЛЕНИЕ НА НОЛЬ" << endl;
  644.                                 exit(1);
  645.                             }
  646.                             operat = '0';
  647.                             find_and_set_value1(list, temp_name, find_and_get_value(list, temp_name) / temp_value2);
  648.                         }
  649.                     }
  650.                     else if (cif(x) && cifinch < 5)
  651.                     {
  652.                         cifinch++;
  653.                         temp_value[cifinch] = number(x);
  654.                         q = 7; break;
  655.                     }
  656.                     if ((x == ';') && pk == 0)
  657.                     {
  658.                         find_and_set_value(list, temp_name, temp_value);
  659.                         q = 6; break;
  660.                     }
  661.                     if (x == ';')
  662.                     {
  663.                         q = 6; break;
  664.                     }
  665.                     if (oper(x))
  666.                     {
  667.                         temp_value1 = convert_int(temp_value);
  668.                         pk++;
  669.                         if (x == '*')
  670.                         {
  671.                             operat = '*';
  672.                         }
  673.                         if (x == '-')
  674.                         {
  675.                             operat = '-';
  676.                         }
  677.                         if (x == '+')
  678.                         {
  679.                             operat = '+';
  680.                         }
  681.                         if (x == '/')
  682.                         {
  683.                             operat = '/';
  684.                         }
  685.                         q = 4; break;
  686.                     }
  687.                 }
  688.                 if (operat != '0')
  689.                 {
  690.                     temp_value2 = convert_int(temp_value);
  691.                     if (cif(x) && cifinch < 5)
  692.                     {
  693.                         cifinch++;
  694.                         temp_value[cifinch] = number(x);
  695.                         q = 7; break;
  696.                     }
  697.                     if (operat == '*')
  698.                     {
  699.                         operat = '0';
  700.                         find_and_set_value1(list, temp_name, temp_value1 * temp_value2);
  701.                         if (pk < 1)
  702.                         {
  703.                             q = 6; break;
  704.                         }
  705.                         else
  706.                         {
  707.                             q = 7;
  708.                         }
  709.                     }
  710.                     if (operat == '-')
  711.                     {
  712.                         operat = '0';
  713.                         find_and_set_value1(list, temp_name, temp_value1 - temp_value2);
  714.                         if (pk < 1)
  715.                         {
  716.                             q = 6; break;
  717.                         }
  718.                         else
  719.                         {
  720.                             q = 7;
  721.                         }
  722.                     }
  723.                     if (operat == '+')
  724.                     {
  725.                         operat = '0';
  726.                         find_and_set_value1(list, temp_name, temp_value1 + temp_value2);
  727.                         if (pk < 1)
  728.                         {
  729.                             q = 6; break;
  730.                         }
  731.                         else
  732.                         {
  733.                             q = 7;
  734.                         }
  735.                     }
  736.                     if (operat == '/')
  737.                     {
  738.                         if (temp_value2 == 0)
  739.                         {
  740.                             cout << "ОБНАРУЖЕНО ДЕЛЕНИЕ НА НОЛЬ" << endl;
  741.                             exit(1);
  742.                         }
  743.                         operat = '0';
  744.                         find_and_set_value1(list, temp_name, temp_value1 / temp_value2);
  745.                         if (pk < 1)
  746.                         {
  747.                             q = 6; break;
  748.                         }
  749.                         else
  750.                         {
  751.                             q = 7;
  752.                         }
  753.                     }
  754.  
  755.                 }
  756.                 else if (cif(x) && cifinch < 5)
  757.                 {
  758.                     cifinch++;
  759.                     temp_value[cifinch] = number(x);
  760.                     q = 7; break;
  761.                 }
  762.                 if ((x == ';')&&pk==0)
  763.                 {
  764.                     find_and_set_value(list, temp_name, temp_value);
  765.                     q = 6; break;
  766.                 }
  767.                 if (x == ';')
  768.                 {
  769.                     q = 6; break;
  770.                 }
  771.                 if (oper(x))
  772.                 {
  773.                     temp_value1 = convert_int(temp_value);
  774.                     pk++;
  775.                     if (x == '*')
  776.                     {
  777.                         operat = '*';
  778.                     }
  779.                     if (x == '-')
  780.                     {
  781.                         operat = '-';
  782.                     }
  783.                     if (x == '+')
  784.                     {
  785.                         operat = '+';
  786.                     }
  787.                     if (x == '/')
  788.                     {
  789.                         operat = '/';
  790.                     }
  791.                     q = 4; break;
  792.                 }
  793.             }
  794.             default:break;
  795.             }
  796.         }
  797.         in.close();
  798.         if (misstake > 0)
  799.         {
  800.             calculate_ok = false;
  801.             cout << "Всего в коде найдено " << misstake << " ошибок вычисления." << endl;
  802.         }
  803.         else
  804.         {
  805.             calculate_ok = true;
  806.             if (!empty_list(list))
  807.             {
  808.                 cout << "Вычисления прошли успешно: " << endl;
  809.                 calculate_ok = true;
  810.                 cout << "Список переменных и соответствующих им значений:" << endl;;
  811.                 show_list_and_value(list);
  812.             }
  813.         }
  814.     }
  815. }
  816.  
  817. void Compile::compile()
  818. {
  819.     this->analyze();
  820.     this->memory();
  821.     this->calculate();
  822.     if (this->analyze_ok && this->memory_and_initial_ok && this->calculate_ok)
  823.     {
  824.         cout << "Компиляция завершена успешно! " << endl;
  825.     }
  826. }
  827.  
  828. int main()
  829. {
  830.     setlocale(LC_ALL, "ru");
  831.     Compile A;
  832.     A.compile();
  833.     system("pause");
  834.     return 0;
  835. }
  836.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement