Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- auto ClassStmt(LogClass *Log, bool result, std::list<Word> const& list, std::list<Word>::iterator iterator)
- {
- string tempVisible;
- std::printf("\n");
- for (auto i = iterator; i != list.end(); ++i)
- {
- c.type = i->lexeme; //class
- i = NextIterator(list, iterator);
- if (i->tag == Tag::ID)
- {
- c.name = i->lexeme;
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: uncorrect name class\n");
- Log->PrintError(1, "uncorrect name class");
- result = false;
- return i;
- }
- if (i->tag == Tag::COLON)
- {
- i = NextIterator(list, iterator);
- if (i->tag == Tag::ID)
- {
- c.parentName = i->lexeme;
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: uncorrect parent name class\n");
- Log->PrintError(1, "uncorrect parent name class");
- result = false;
- return i;
- }
- }
- if (i->tag == Tag::OPEN_BRACE)
- {
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: no open brace( { )\n");
- Log->PrintError(1, "no open brace( { )");
- result = false;
- return i;
- }
- int j = 0;
- while (true)
- {
- if (i->tag == Tag::CLOSE_BRACE)
- {
- i = NextIterator(list, iterator);
- if (i->tag == Tag::SEMICOLON)
- {
- int tt;
- //++i;
- }
- else
- {
- std::printf("Error: NOT colon ( : )\n");
- Log->PrintError(1, "NOT colon ( : )");
- result = false;
- return i;
- }
- break;
- }
- if (i->tag == Tag::PUBLIC)
- {
- item[j].visible = tempVisible = "public";
- i = NextIterator(list, iterator);
- }
- else if (i->tag == Tag::PRIVATE)
- {
- item[j].visible = tempVisible = "private";
- i = NextIterator(list, iterator);
- }
- else if (i->tag == Tag::PROTECTED)
- {
- item[j].visible = tempVisible = "protected";
- i = NextIterator(list, iterator);
- }
- if (tempVisible.length() > 0)
- {
- if (i->tag == Tag::COLON)
- {
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: NOT colon ( : )\n");
- Log->PrintError(1, "NOT colon ( : )");
- result = false;
- return i;
- }
- }
- else
- {
- item[j].visible = tempVisible = "private";
- i = NextIterator(list, iterator);
- }
- if (i->tag == Tag::INT)
- {
- item[j].type = "INT";
- i = NextIterator(list, iterator);
- }
- else if (i->tag == Tag::FLOAT)
- {
- item[j].type = "FLOAT";
- i = NextIterator(list, iterator);
- }
- else if (i->tag == Tag::ID)
- {
- item[j].type = "ID";
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: NOT type\n");
- Log->PrintError(1, "NOT type");
- result = false;
- return i;
- }
- if (i->tag == Tag::ID)
- {
- item[j].name = "ID";
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: NOT name\n");
- Log->PrintError(1, "NOT name");
- result = false;
- return i;
- }
- if (i->tag == Tag::SEMICOLON)
- {
- i = NextIterator(list, iterator);
- }
- else
- {
- std::printf("Error: NOT semicolon ( ; )\n");
- Log->PrintError(1, "NOT semicolon ( ; )");
- result = false;
- return i;
- }
- if (i->tag == Tag::CLOSE_BRACE)
- {
- i = NextIterator(list, iterator);
- break;
- }
- j++;
- }
- //std::cout << "Type: " << c.type << endl << "Name: " << c.name << endl << "Parent name: " << c.parentName << endl;
- //Log->PrintInfoClass((char*)c.type.c_str(), (char*)c.name.c_str(), (char*)c.parentName.c_str());
- return i;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement