Advertisement
Guest User

Untitled

a guest
Mar 15th, 2019
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. auto ClassStmt(LogClass *Log, bool result, std::list<Word> const& list, std::list<Word>::iterator iterator)
  2. {
  3.     string tempVisible;
  4.     std::printf("\n");
  5.     for (auto i = iterator; i != list.end(); ++i)
  6.     {
  7.         c.type = i->lexeme; //class
  8.         i = NextIterator(list, iterator);
  9.         if (i->tag == Tag::ID)
  10.         {
  11.             c.name = i->lexeme;
  12.             i = NextIterator(list, iterator);
  13.         }
  14.         else
  15.         {
  16.             std::printf("Error: uncorrect name class\n");
  17.             Log->PrintError(1, "uncorrect name class");
  18.             result = false;
  19.             return i;
  20.         }
  21.        
  22.         if (i->tag == Tag::COLON)
  23.         {
  24.             i = NextIterator(list, iterator);
  25.             if (i->tag == Tag::ID)
  26.             {
  27.                 c.parentName = i->lexeme;
  28.                 i = NextIterator(list, iterator);
  29.             }
  30.             else
  31.             {
  32.                 std::printf("Error: uncorrect parent name class\n");
  33.                 Log->PrintError(1, "uncorrect parent name class");
  34.                 result = false;
  35.                 return i;
  36.             }
  37.         }
  38.  
  39.         if (i->tag == Tag::OPEN_BRACE)
  40.         {
  41.             i = NextIterator(list, iterator);
  42.         }
  43.         else
  44.         {
  45.             std::printf("Error: no open brace( { )\n");
  46.             Log->PrintError(1, "no open brace( { )");
  47.             result = false;
  48.             return i;
  49.         }
  50.         int j = 0;
  51.         while (true)
  52.         {
  53.             if (i->tag == Tag::CLOSE_BRACE)
  54.             {
  55.                 i = NextIterator(list, iterator);
  56.                 if (i->tag == Tag::SEMICOLON)
  57.                 {
  58.                     int tt;
  59.                     //++i;
  60.                 }
  61.                 else
  62.                 {
  63.                     std::printf("Error: NOT colon ( : )\n");
  64.                     Log->PrintError(1, "NOT colon ( : )");
  65.                     result = false;
  66.                     return i;
  67.                 }
  68.                 break;
  69.             }
  70.  
  71.             if (i->tag == Tag::PUBLIC)
  72.             {
  73.                 item[j].visible = tempVisible = "public";
  74.                 i = NextIterator(list, iterator);
  75.             }
  76.             else if (i->tag == Tag::PRIVATE)
  77.             {
  78.                 item[j].visible = tempVisible = "private";
  79.                 i = NextIterator(list, iterator);
  80.             }
  81.             else if (i->tag == Tag::PROTECTED)
  82.             {
  83.                 item[j].visible = tempVisible = "protected";
  84.                 i = NextIterator(list, iterator);
  85.             }
  86.             if (tempVisible.length() > 0)
  87.             {
  88.                 if (i->tag == Tag::COLON)
  89.                 {
  90.                     i = NextIterator(list, iterator);
  91.                 }
  92.                 else
  93.                 {
  94.                     std::printf("Error: NOT colon ( : )\n");
  95.                     Log->PrintError(1, "NOT colon ( : )");
  96.                     result = false;
  97.                     return i;
  98.                 }
  99.             }
  100.             else
  101.             {
  102.                 item[j].visible = tempVisible = "private";
  103.                 i = NextIterator(list, iterator);
  104.             }
  105.  
  106.             if (i->tag == Tag::INT)
  107.             {
  108.                 item[j].type = "INT";
  109.                 i = NextIterator(list, iterator);
  110.             }
  111.             else if (i->tag == Tag::FLOAT)
  112.             {
  113.                 item[j].type = "FLOAT";
  114.                 i = NextIterator(list, iterator);
  115.             }
  116.             else if (i->tag == Tag::ID)
  117.             {
  118.                 item[j].type = "ID";
  119.                 i = NextIterator(list, iterator);
  120.             }
  121.             else
  122.             {
  123.                 std::printf("Error: NOT type\n");
  124.                 Log->PrintError(1, "NOT type");
  125.                 result = false;
  126.                 return i;
  127.             }
  128.  
  129.             if (i->tag == Tag::ID)
  130.             {
  131.                 item[j].name = "ID";
  132.                 i = NextIterator(list, iterator);
  133.             }
  134.             else
  135.             {
  136.                 std::printf("Error: NOT name\n");
  137.                 Log->PrintError(1, "NOT name");
  138.                 result = false;
  139.                 return i;
  140.             }
  141.  
  142.             if (i->tag == Tag::SEMICOLON)
  143.             {
  144.                 i = NextIterator(list, iterator);
  145.             }
  146.             else
  147.             {
  148.                 std::printf("Error: NOT semicolon ( ; )\n");
  149.                 Log->PrintError(1, "NOT semicolon ( ; )");
  150.                 result = false;
  151.                 return i;
  152.             }
  153.  
  154.             if (i->tag == Tag::CLOSE_BRACE)
  155.             {
  156.                 i = NextIterator(list, iterator);
  157.                 break;
  158.             }
  159.  
  160.             j++;
  161.         }
  162.  
  163.         //std::cout << "Type: " << c.type << endl << "Name: " << c.name << endl << "Parent name: " << c.parentName << endl;
  164.         //Log->PrintInfoClass((char*)c.type.c_str(), (char*)c.name.c_str(), (char*)c.parentName.c_str());
  165.  
  166.         return i;
  167.        
  168.     }
  169.    
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement