aLT22

3semlab2 BETA

Nov 21st, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <algorithm>
  5.  
  6. using namespace std;
  7.  
  8. enum status
  9. {
  10.     Start = 0,
  11.     PossibleComment = 1,
  12.     Comment1 = 2,
  13.     Comment2 = 3,
  14.     PossibleEnd = 4,
  15.     Char = 5,
  16.     String = 6,
  17.     Ecran = 7,
  18.     PSD,
  19.     PDD,
  20.     PCD,
  21.     ERROR,
  22.     EOPCDD,
  23.     EOPCED,
  24.     EOPCESD,
  25.     PCDD,
  26.     PCED,
  27.     PCESD
  28. };
  29.  
  30. int main ()
  31. {
  32.     vector <char> mas;
  33.     ifstream fin("input.txt");
  34.     ofstream fout("output.txt");
  35.     ofstream fouts("outputs.txt");
  36.     status st = Start;
  37.     bool checkL = 0, check1 = 0, checkF = 0, check2 = 0;
  38.     if (fin)
  39.     {
  40.         char symbol;
  41.         while (fin.get(symbol))
  42.         {
  43.             cout << symbol;
  44.             switch (st)
  45.             {
  46.             case Start:
  47.                 if (symbol == '/')
  48.                 {
  49.                     st = PossibleComment;
  50.                     break;
  51.                 }
  52.                 else if (symbol == '\'')
  53.                 {      
  54.                     st = Char;
  55.                     fout << symbol;
  56.                     break;
  57.                 }
  58.                 else if (symbol == '"')
  59.                 {
  60.                     st = String;
  61.                     fout << symbol;
  62.                     break;
  63.                 }
  64.                 else if (symbol == '+' || symbol == '-')
  65.                 {
  66.                     st = PSD;
  67.                     fout << symbol;
  68.                     mas.push_back(symbol);
  69.                     break;
  70.                 }
  71.                 else if (symbol >= '0' && symbol <= '9')
  72.                 {
  73.                     st = PCD;
  74.                     fout << symbol;
  75.                     mas.push_back(symbol);
  76.                     break;
  77.                 }
  78.                 else if (symbol == '.')
  79.                 {
  80.                     st = PDD;
  81.                     fout << symbol;
  82.                     mas.push_back(symbol);
  83.                     break;
  84.                 }
  85.                 else
  86.                 {
  87.                     st = Start;
  88.                     fout << symbol;
  89.                     break;
  90.                 }
  91.             case PSD:
  92.                 if (symbol == '+' || symbol == '-')
  93.                 {
  94.                     st = PSD;
  95.                     fout << symbol;
  96.                     mas.clear();
  97.                     mas.push_back(symbol);
  98.                     break;
  99.                 }
  100.                 else if (symbol >= '0' || symbol <= '9')
  101.                 {
  102.                     mas.push_back(symbol);
  103.                     fout << symbol;
  104.                     st = PCD;
  105.                     break;
  106.                 }
  107.                 else if (symbol == '.')
  108.                 {
  109.                     mas.push_back(symbol);
  110.                     fout << symbol;
  111.                     st = PDD;
  112.                     break;
  113.                 }
  114.                 else
  115.                 {
  116.                     mas.clear();
  117.                     fout << symbol;
  118.                     st = Start;
  119.                     break;
  120.                 }
  121.             case PDD:
  122.                 if (symbol >= '0' && symbol <= '9')
  123.                 {
  124.                     mas.push_back(symbol);
  125.                     fout << symbol;
  126.                     st = PCD;
  127.                     break;
  128.                 }
  129.                 else
  130.                 {
  131.                     mas.clear();
  132.                     fout << symbol;
  133.                     st = Start;
  134.                     break;
  135.                 }
  136.             case PCD:
  137.                 if (symbol >= '0' && symbol <= '9')
  138.                 {
  139.                     mas.push_back(symbol);
  140.                     fout << symbol;
  141.                     st = PCD;
  142.                     break;
  143.                 }
  144.                 else if (symbol == '.')
  145.                 {
  146.                     mas.push_back(symbol);
  147.                     fout << symbol;
  148.                     st = PCDD;
  149.                     break;
  150.                 }
  151.                 else if (symbol == 'e' || symbol == 'E')
  152.                 {
  153.                     mas.push_back(symbol);
  154.                     fout << symbol;
  155.                     st = PCED;
  156.                     break;
  157.                 }
  158.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  159.                 {
  160.                     for (int i = 0; i < mas.size(); i++)
  161.                     {
  162.                         fouts << mas[i];
  163.                     }
  164.                     fouts << " ERROR" << endl;
  165.                     mas.clear();
  166.                     st = Start;
  167.                     break;
  168.                 }
  169.                 else
  170.                 {
  171.                     mas.push_back(symbol);
  172.                     fout << symbol;
  173.                     st = ERROR;
  174.                     break;
  175.                 }
  176.             case PCDD:
  177.                 if (symbol >= '0' && symbol <= '9')
  178.                 {
  179.                     mas.push_back(symbol);
  180.                     fout << symbol;
  181.                     st = PCDD;
  182.                     break;
  183.                 }
  184.                 else if (symbol == 'e' || symbol == 'E')
  185.                 {
  186.                     mas.push_back(symbol);
  187.                     fout << symbol;
  188.                     st = PCED;
  189.                     break;
  190.                 }
  191.                 else if (symbol == 'l' || symbol == 'L' || symbol == 'f' || symbol == 'F')
  192.                 {
  193.                     mas.push_back(symbol);
  194.                     fout << symbol;
  195.                     st = EOPCDD;
  196.                     break;
  197.                 }
  198.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  199.                 {
  200.                     for (int i = 0; i < mas.size(); i++)
  201.                     {
  202.                         fouts << mas[i];
  203.                     }
  204.                     fouts << " DOUBLE" << endl;
  205.                     mas.clear();
  206.                     st = Start;
  207.                     break;
  208.                 }
  209.                 else
  210.                 {
  211.                     mas.push_back(symbol);
  212.                     fout << symbol;
  213.                     st = ERROR;
  214.                     break;
  215.                 }
  216.             case PCED:
  217.                 if (symbol >= '0' && symbol <= '9')
  218.                 {
  219.                     mas.push_back(symbol);
  220.                     fout << symbol;
  221.                     st = PCED;
  222.                     break;
  223.                 }
  224.                 else if (symbol == '+' || symbol == '-')
  225.                 {
  226.                     mas.push_back(symbol);
  227.                     fout << symbol;
  228.                     st = PCESD;
  229.                     break;
  230.                 }
  231.                 else if (symbol == 'l' || symbol == 'L' || symbol == 'f' || symbol == 'F')
  232.                 {
  233.                     mas.push_back(symbol);
  234.                     fout << symbol;
  235.                     st = EOPCED;
  236.                     break;
  237.                 }
  238.                 else if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'l' || mas[mas.size()-1] == 'L'))
  239.                 {
  240.                     for (int i = 0; i < mas.size(); i++)
  241.                     {
  242.                         fouts << mas[i];
  243.                     }
  244.                     fouts << " LONG DOUBLE" << endl;
  245.                     st = Start;
  246.                     mas.clear();
  247.                     break;
  248.                 }
  249.                 else if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'f' || mas[mas.size()-1] == 'F'))
  250.                 {
  251.                     for (int i = 0; i < mas.size(); i++)
  252.                     {
  253.                         fouts << mas[i];
  254.                     }
  255.                     fouts << " FLOAT" << endl;
  256.                     st = Start;
  257.                     mas.clear();
  258.                     break;
  259.                 }
  260.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  261.                 {
  262.                     for (int i = 0; i < mas.size(); i++)
  263.                     {
  264.                         fouts << mas[i];
  265.                     }
  266.                     fouts << " DOUBLE" << endl;
  267.                     st = Start;
  268.                     mas.clear();
  269.                     break;
  270.                 }
  271.                 else
  272.                 {
  273.                     fout << symbol;
  274.                     st = ERROR;
  275.                     mas.push_back(symbol);
  276.                     break;
  277.                 }
  278.             case PCESD:
  279.                 if (symbol >= '0' && symbol <= '9')
  280.                 {
  281.                     mas.push_back(symbol);
  282.                     fout << symbol;
  283.                     st = PCESD;
  284.                     break;
  285.                 }
  286.                 else if (symbol == '+' || symbol == '-')
  287.                 {
  288.                     mas.push_back(symbol);
  289.                     fout << symbol;
  290.                     st = ERROR;
  291.                     break;
  292.                 }
  293.                 else if (symbol == 'l' || symbol == 'L' || symbol == 'f' || symbol == 'F')
  294.                 {
  295.                     mas.push_back(symbol);
  296.                     fout << symbol;
  297.                     st = EOPCESD;
  298.                     break;
  299.                 }
  300.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  301.                 {
  302.                     for (int i = 0; i < mas.size(); i++)
  303.                     {
  304.                         fouts << mas[i];
  305.                     }
  306.                     fouts << " ERROR" << endl;
  307.                     mas.clear();
  308.                     st = Start;
  309.                     break;
  310.                 }
  311.                 else
  312.                 {
  313.                     st = ERROR;
  314.                     mas.push_back(symbol);
  315.                     fout << symbol;
  316.                     break;
  317.                 }
  318.             case EOPCDD:
  319.                 if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'l' || mas[mas.size()-1] == 'L'))
  320.                 {
  321.                     for (int i = 0; i < mas.size(); i++)
  322.                     {
  323.                         fouts << mas[i];
  324.                     }
  325.                     fouts << " LONG DOUBLE" << endl;
  326.                     st = Start;
  327.                     mas.clear();
  328.                     break;
  329.                 }
  330.                 else if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'f' || mas[mas.size()-1] == 'F'))
  331.                 {
  332.                     for (int i = 0; i < mas.size(); i++)
  333.                     {
  334.                         fouts << mas[i];
  335.                     }
  336.                     fouts << " FLOAT" << endl;
  337.                     st = Start;
  338.                     mas.clear();
  339.                     break;
  340.                 }
  341.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  342.                 {
  343.                     for (int i = 0; i < mas.size(); i++)
  344.                     {
  345.                         fouts << mas[i];
  346.                     }
  347.                     fouts << " DOUBLE" << endl;
  348.                     st = Start;
  349.                     mas.clear();
  350.                     break;
  351.                 }
  352.                 else
  353.                 {
  354.                     fout << symbol;
  355.                     st = ERROR;
  356.                     mas.push_back(symbol);
  357.                     break;
  358.                 }
  359.             case EOPCED:
  360.                 if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'l' || mas[mas.size()-1] == 'L'))
  361.                 {
  362.                     for (int i = 0; i < mas.size(); i++)
  363.                     {
  364.                         fouts << mas[i];
  365.                     }
  366.                     fouts << " LONG DOUBLE" << endl;
  367.                     st = Start;
  368.                     mas.clear();
  369.                     break;
  370.                 }
  371.                 else if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'f' || mas[mas.size()-1] == 'F'))
  372.                 {
  373.                     for (int i = 0; i < mas.size(); i++)
  374.                     {
  375.                         fouts << mas[i];
  376.                     }
  377.                     fouts << " FLOAT" << endl;
  378.                     st = Start;
  379.                     mas.clear();
  380.                     break;
  381.                 }
  382.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  383.                 {
  384.                     for (int i = 0; i < mas.size(); i++)
  385.                     {
  386.                         fouts << mas[i];
  387.                     }
  388.                     fouts << " DOUBLE" << endl;
  389.                     st = Start;
  390.                     mas.clear();
  391.                     break;
  392.                 }
  393.                 else
  394.                 {
  395.                     fout << symbol;
  396.                     st = ERROR;
  397.                     mas.push_back(symbol);
  398.                     break;
  399.                 }
  400.             case EOPCESD:
  401.                 if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'l' || mas[mas.size()-1] == 'L'))
  402.                 {
  403.                     for (int i = 0; i < mas.size(); i++)
  404.                     {
  405.                         fouts << mas[i];
  406.                     }
  407.                     fouts << " LONG DOUBLE" << endl;
  408.                     st = Start;
  409.                     mas.clear();
  410.                     break;
  411.                 }
  412.                 else if ((symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-') && (mas[mas.size()-1] == 'f' || mas[mas.size()-1] == 'F'))
  413.                 {
  414.                     for (int i = 0; i < mas.size(); i++)
  415.                     {
  416.                         fouts << mas[i];
  417.                     }
  418.                     fouts << " FLOAT" << endl;
  419.                     st = Start;
  420.                     mas.clear();
  421.                     break;
  422.                 }
  423.                 else if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  424.                 {
  425.                     for (int i = 0; i < mas.size(); i++)
  426.                     {
  427.                         fouts << mas[i];
  428.                     }
  429.                     fouts << " DOUBLE" << endl;
  430.                     st = Start;
  431.                     mas.clear();
  432.                     break;
  433.                 }
  434.                 else
  435.                 {
  436.                     fout << symbol;
  437.                     st = ERROR;
  438.                     mas.push_back(symbol);
  439.                     break;
  440.                 }
  441.             case ERROR:
  442.                 if (symbol == ' ' || symbol == '\n' || symbol == '\t' || symbol == ';' || symbol == '\0' || symbol == '*' || symbol == '/' || symbol == '=' || symbol == '+' || symbol == '-')
  443.                 {
  444.                     for (int i = 0; i < mas.size(); i++)
  445.                     {
  446.                         fouts << mas[i];
  447.                     }
  448.                     fouts << " ERROR" << endl;
  449.                     mas.clear();
  450.                     st = Start;
  451.                     break;
  452.                 }
  453.                 else
  454.                 {
  455.                     st = ERROR;
  456.                     mas.push_back(symbol);
  457.                     fout << symbol;
  458.                     break;
  459.                 }
  460.             case PossibleComment:
  461.                 if (symbol == '/')
  462.                 {
  463.                     st = Comment1;
  464.                     break;
  465.                 }
  466.                 else
  467.                 {
  468.                     if (symbol == '*')
  469.                     {
  470.                         st = Comment2;
  471.                         break;
  472.                     }
  473.                     else
  474.                     {
  475.                         fout << symbol;
  476.                         break;
  477.                     }
  478.                 }
  479.             case Comment1:
  480.                 if (symbol == '\n')
  481.                 {
  482.                     st = Start;
  483.                     fout<<symbol;
  484.                 }
  485.  
  486.                 break;
  487.             case Comment2:
  488.                 if (symbol == '*')
  489.                 {
  490.                     st = PossibleEnd;
  491.                     break;
  492.                 }
  493.                 else
  494.                 {
  495.                     break;
  496.                 }
  497.             case PossibleEnd:
  498.                 if (symbol == '/')
  499.                 {
  500.                     st = Start;
  501.                     break;
  502.                 }
  503.                 else if(symbol == '*')
  504.                 {
  505.                     break;
  506.                 }
  507.                 else
  508.                 {
  509.                     st = Comment2;
  510.                     break;
  511.                 }
  512.             case Char:
  513.                 if (symbol == '\'' || symbol == '\n')
  514.                 {
  515.                     fout << symbol;
  516.                     st = Start;
  517.                     break;
  518.                 }
  519.                 else
  520.                 {
  521.                     if (symbol == '\\')
  522.                     {
  523.                         fout << symbol;
  524.                         st = Ecran;
  525.                         break;
  526.                     }
  527.                     else
  528.                     {
  529.                         fout << symbol;
  530.                         break;
  531.                     }
  532.                 }
  533.             case String:
  534.                 if (symbol == '"' || symbol == '\n')
  535.                 {
  536.                     fout << symbol;
  537.                     st = Start;
  538.                     break;
  539.                 }
  540.                 else
  541.                 {
  542.                     if (symbol == '\\')
  543.                     {
  544.                         fout << symbol;
  545.                         st = Ecran;
  546.                         break;
  547.                     }
  548.                     else
  549.                     {
  550.                         fout << symbol;
  551.                         break;
  552.                     }
  553.                 }
  554.             case Ecran:
  555.                 if (symbol == '\'')
  556.                 {
  557.                     fout << symbol;
  558.                     st = Char;
  559.                     break;
  560.                 }
  561.                 else
  562.                 {
  563.                     if (symbol == '"')
  564.                     {
  565.                         fout << symbol;
  566.                         st = String;
  567.                         break;
  568.                     }
  569.                     else
  570.                     {
  571.                         fout << symbol;
  572.                         st = Start;
  573.                         break;
  574.                     }
  575.                 }
  576.             }
  577.         }
  578.     }
  579.     fin.close(); fout.close(); fouts.close();
  580.     return 0;
  581. }
Advertisement
Add Comment
Please, Sign In to add comment