Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- string PrintStatement::generate()
- {
- stringstream code;
- auto it = lexpr.begin();
- auto expr = *it;
- auto str = ((StringExpr*)expr)->str;
- it++;
- string character = "";
- if (str.find("%") != std::string::npos)
- {
- std::cout << "found!" << '\n';
- for(auto i = 0; i < str.size(); ++i)
- {
- if(str[i] == '%')
- {
- string label = label_control->newLabel("string");
- (*string_labels)[label] = character;
- code<<"la $a0, "<<label<<endl;
- code<<"jal puts"<<endl;
- if(str[++i] == 'd')
- {
- auto expr = *it;
- string v1 = expr->generate();
- reg_control->freePlace(expr->mips_code.place);
- code<<v1<<endl;
- code<<"move $a0, "<<expr->mips_code.place<<endl;
- code<<"jal put_udecimal"<<endl;
- }else
- {
- auto expr = *it;
- string v1 = expr->generate();
- reg_control->freePlace(expr->mips_code.place);
- code<<v1<<endl;
- code<<"move $a0, "<<expr->mips_code.place<<endl;
- code<<"jal put_char"<<endl;
- }
- character = "";
- ++it;
- }
- character += str[i];
- }
- }else
- {
- //string temp, label = getLabel();
- string label = label_control->newLabel("string");
- //dataSect += label + ":.asciz " + test + "\n";
- (*string_labels)[label] = character;
- string temp = reg_control->getNext();
- code << "la "+ temp + ", " + label + "\n";
- code << "move $a0, " + temp + "\n";
- code << "jal puts\n";
- }
- code<<endl;
- return code.str();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement