Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. string PrintStatement::generate()
  2. {
  3. stringstream code;
  4. auto it = lexpr.begin();
  5. auto expr = *it;
  6.  
  7. auto str = ((StringExpr*)expr)->str;
  8. it++;
  9. string character = "";
  10. if (str.find("%") != std::string::npos)
  11. {
  12. std::cout << "found!" << '\n';
  13. for(auto i = 0; i < str.size(); ++i)
  14. {
  15. if(str[i] == '%')
  16. {
  17. string label = label_control->newLabel("string");
  18. (*string_labels)[label] = character;
  19. code<<"la $a0, "<<label<<endl;
  20. code<<"jal puts"<<endl;
  21. if(str[++i] == 'd')
  22. {
  23. auto expr = *it;
  24. string v1 = expr->generate();
  25. reg_control->freePlace(expr->mips_code.place);
  26.  
  27. code<<v1<<endl;
  28. code<<"move $a0, "<<expr->mips_code.place<<endl;
  29. code<<"jal put_udecimal"<<endl;
  30. }else
  31. {
  32. auto expr = *it;
  33. string v1 = expr->generate();
  34. reg_control->freePlace(expr->mips_code.place);
  35.  
  36. code<<v1<<endl;
  37. code<<"move $a0, "<<expr->mips_code.place<<endl;
  38. code<<"jal put_char"<<endl;
  39. }
  40.  
  41. character = "";
  42. ++it;
  43. }
  44.  
  45. character += str[i];
  46. }
  47. }else
  48. {
  49. //string temp, label = getLabel();
  50. string label = label_control->newLabel("string");
  51. //dataSect += label + ":.asciz " + test + "\n";
  52. (*string_labels)[label] = character;
  53. string temp = reg_control->getNext();
  54. code << "la "+ temp + ", " + label + "\n";
  55. code << "move $a0, " + temp + "\n";
  56. code << "jal puts\n";
  57. }
  58.  
  59. code<<endl;
  60.  
  61. return code.str();
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement