Year 2 compilers coureswork

test10.tac 2.0KB

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