Advertisement
aLT22

3semlab2 MAIN

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