Year 2 compilers coureswork

test15.tac 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. --C COMPILER
  2. int y = 5;
  3. int fun1(){
  4. int x = 11;
  5. return x;
  6. }
  7. int main() {
  8. int x = 4;
  9. return y * x * fun1();
  10. }
  11. parse finished
  12. ~
  13. ~
  14. ~
  15. int
  16. =
  17. y
  18. 5
  19. D
  20. d
  21. int
  22. F
  23. fun1
  24. ;
  25. ~
  26. int
  27. =
  28. x
  29. 11
  30. return
  31. x
  32. D
  33. d
  34. int
  35. F
  36. main
  37. ;
  38. ~
  39. int
  40. =
  41. x
  42. 4
  43. return
  44. *
  45. *
  46. y
  47. x
  48. apply
  49. fun1
  50. y := 5
  51. func fun1
  52. x := 11
  53. ret x
  54. end fun1
  55. func main
  56. x := 4
  57. $t1 := y * x
  58. call fun1, $t2
  59. $t0 := $t1 * $t2
  60. ret $t0
  61. end main
  62. =====
  63. li $a0, 68
  64. li $v0, 9
  65. syscall
  66. or $fp, $0, $v0
  67. la $t0, main
  68. sw $t0, 0($fp)
  69. sw $0, 4($fp)
  70. jal main
  71. j done
  72. #y := 5
  73. li $8, 5
  74. or $16, $0, $8
  75. #func fun1
  76. fun1:
  77. li $a0, 68
  78. li $v0, 9
  79. syscall
  80. sw $fp, 4($v0)
  81. sw $16, 8($fp)
  82. or $fp, $0, $v0
  83. la $t0, fun1
  84. sw $t0, 0($fp)
  85. sw $ra, 64($fp)
  86. #x := 11
  87. li $9, 11
  88. or $16, $0, $9
  89. #ret x
  90. or $v1, $0, $16
  91. jr $31
  92. #end fun1
  93. #func main
  94. main:
  95. li $a0, 68
  96. li $v0, 9
  97. syscall
  98. sw $fp, 4($v0)
  99. sw $16, 8($fp)
  100. or $fp, $0, $v0
  101. la $t0, main
  102. sw $t0, 0($fp)
  103. sw $ra, 64($fp)
  104. #x := 4
  105. li $10, 4
  106. or $16, $0, $10
  107. #$t1 := y * x
  108. mult $17, $16
  109. mflo $11
  110. #call fun1, $t2
  111. jal fun1
  112. lw $fp, 4($fp)
  113. lw $ra, 64($fp)
  114. lw $16, 8($fp)
  115. lw $17, 12($fp)
  116. or $12, $0, $v1
  117. #$t0 := $t1 * $t2
  118. mult $11, $12
  119. mflo $13
  120. #ret $t0
  121. or $v1, $0, $13
  122. jr $31
  123. #end main
  124. done:
  125. ori $v0, $0, 10
  126. syscall