Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. else if(program->type=="Input"){
  2. std::cout << "input " << destReg << std::endl;
  3. }
  4. else if(program->type=="Output"){
  5. std::string src = makeName("src");
  6. CompileRec (src, program->branches[0]);
  7. std::cout << "output " << src << std::endl;
  8. }
  9. else if(program->type=="LessThan"){
  10. std::string src1 = makeName("src");
  11. std::string src2 = makeName("src");
  12. CompileRec (src1, program->branches[0]);
  13. CompileRec (src2, program->branches[1]);
  14. std::cout << "lt " << destReg << " " << src1 << " " << src2 << std::endl;
  15. }
  16. else if(program->type=="Add"){
  17. std::string src1 = makeName("src");
  18. std::string src2 = makeName("src");
  19. CompileRec (src1, program->branches[0]);
  20. CompileRec (src2, program->branches[1]);
  21. std::cout << "add " << destReg << " " << src1 << " " << src2 << std::endl;
  22. }
  23. else if(program->type=="Sub"){
  24. std::string src1 = makeName("src");
  25. std::string src2 = makeName("src");
  26. CompileRec (src1, program->branches[0]);
  27. CompileRec (src2, program->branches[1]);
  28. std::cout << "sub " << destReg << " " << src1 << " " << src2 << std::endl;
  29. }
  30. else if(program->type=="Assign"){
  31. std::string src = makeName("src");
  32. CompileRec(src, program->branches[0]);
  33. std::cout << "const " << destReg << " " << src << std::endl;
  34. }
  35. else if(program->type=="If"){
  36. std::string src1 = makeName("src");
  37. std::string src2 = makeName("src");
  38. std::string else_lab = makeName("label");
  39. std::string end_lab = makeName("label");
  40.  
  41. //check for true or false
  42. CompileRec(src1, program->branches[0]);
  43. std::cout << "beq " << src1 << "$0 " << else_lab << std::endl;
  44.  
  45. //default case is to evaluate true case and then skip to end
  46. CompileRec(src2, program->branches[1]);
  47. std::cout << "beq $0 $0 " << end_lab << std::endl;
  48.  
  49. //otherwise evaluate false case
  50. std::cout << ":" << else_lab << std::endl;
  51. CompileRec(src2, program->branches[1]);
  52.  
  53. //endlabel for skipping false case
  54. std::cout << ":" << end_lab << std::endl;
  55. }
  56. else if(program->type=="While"){
  57. std::string condition = makeName("src");
  58. std::string src = makeName("src");
  59. std::string start_lab = makeName("lab");
  60. std::string end_lab = makeName("lab");
  61.  
  62. //set start label to branch back to while condition == true
  63. std::cout << ":" << start_lab << std::endl;
  64. CompileRec(condition, program->branches[0]);
  65. //if condition false, branch to end
  66. std::cout << "beq " << condition << "$0 " << end_lab << std::endl;
  67.  
  68. //execute main clause and branch back to checking condition again
  69. CompileRec(src, program->branches[1]);
  70. std::cout << "beq $0 $0 " << start_lab << std::endl;
  71.  
  72. std::cout << ":" << end_lab << std::endl;
  73.  
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement