Advertisement
Guest User

Untitled

a guest
Jul 25th, 2016
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.88 KB | None | 0 0
  1. (*
  2. Created by Bradley Kovacs
  3. COP 4020 - Summer 2016
  4. Homework 4 - CAM VM
  5. *)
  6.  
  7. let addOne v =
  8. v := !v + 1
  9. ;;
  10.  
  11. let subtractOne v =
  12. v := !v - 1
  13. ;;
  14.  
  15.  
  16. let maxStackHeight = ref 1000;;
  17. let maxMemLength = ref 1000;;
  18. let maxCodeLength = ref 1000;;
  19. let stack = Array.make !maxStackHeight 0;;
  20. let mem = Array.make !maxMemLength 0;;
  21. let code = Array.make !maxCodeLength 0;;
  22. let sr = ref 0;;
  23. let mr = ref 0;;
  24. let cr = ref 0;;
  25.  
  26. let load v =
  27. Array.set stack !sr v
  28. ;;
  29.  
  30. let quote v =
  31. addOne sr;
  32. Array.set stack !sr v
  33. ;;
  34.  
  35. let cur l =
  36. addOne sr;
  37. Array.set stack !sr l
  38. ;;
  39.  
  40. let dupl () =
  41. let ele = stack.(!sr) in
  42. Array.set stack (!sr + 1) ele;
  43. addOne sr
  44. ;;
  45.  
  46. let swap () =
  47. let temp1 = stack.(!sr - 1) in
  48. let temp2 = stack.(!sr) in
  49. Array.set stack !sr temp1;
  50. Array.set stack (!sr - 1) temp2
  51. ;;
  52.  
  53. let rot () =
  54. let temp1 = stack.(!sr - 1) in
  55. let temp2 = stack.(!sr - 2) in
  56. let temp3 = stack.(!sr) in
  57. Array.set stack !sr temp1;
  58. Array.set stack (!sr - 1) temp2;
  59. Array.set stack (!sr - 2) temp3
  60. ;;
  61.  
  62. let irot () =
  63. let temp1 = stack.(!sr - 2) in
  64. let temp2 = stack.(!sr) in
  65. let temp3 = stack.(!sr - 1) in
  66. Array.set stack !sr temp1;
  67. Array.set stack (!sr - 1) temp2;
  68. Array.set stack (!sr - 2) temp3
  69. ;;
  70.  
  71. let plus () =
  72. let temp1 = stack.(!sr) in
  73. let temp2 = stack.(!sr - 1) in
  74. let sum = temp1 + temp2 in
  75. Array.set stack (!sr - 1) sum;
  76. subtractOne sr
  77. ;;
  78.  
  79. let mult () =
  80. let temp1 = stack.(!sr) in
  81. let temp2 = stack.(!sr - 1) in
  82. let product = temp1 * temp2 in
  83. Array.set stack (!sr - 1) product;
  84. subtractOne sr
  85. ;;
  86.  
  87. let fst () =
  88. let ele = stack.(!sr) in
  89. let memEle = mem.(ele) in
  90. Array.set stack !sr memEle
  91. ;;
  92.  
  93. let snd () =
  94. let ele = stack.(!sr) in
  95. let memEle = mem.(ele + 1) in
  96. Array.set stack !sr memEle
  97. ;;
  98.  
  99. let setfst () =
  100. let idx = stack.(!sr - 1) in
  101. Array.set mem idx stack.(!sr);
  102. subtractOne sr
  103. ;;
  104.  
  105. let setsnd () =
  106. let idx = (stack.(!sr - 1) + 1) in
  107. Array.set mem idx stack.(!sr);
  108. subtractOne sr
  109. ;;
  110.  
  111. let cons () =
  112. Array.set mem !mr stack.(!sr);
  113. let ele = stack.(!sr - 1) in
  114. Array.set mem (!mr + 1) ele;
  115. Array.set stack (!sr - 1) !mr;
  116. addOne mr;
  117. addOne mr;
  118. subtractOne sr
  119. ;;
  120.  
  121. let split () =
  122. let ele = mem.(stack.(!sr)) in
  123. Array.set stack (!sr + 1) ele;
  124. let ele2 = mem.(stack.(!sr) + 1) in
  125. Array.set stack !sr ele2;
  126. subtractOne sr
  127. ;;
  128.  
  129. let branch a1 a2 =
  130. Array.set stack (!sr) (if stack.(!sr) == 1 then a1 else a2)
  131. ;;
  132.  
  133. let app () =
  134. let temp = stack.(!sr) in
  135. Array.set stack !sr stack.(!sr - 1);
  136. Array.set stack (!sr - 1) (!cr + 1);
  137. cr := temp
  138. ;;
  139.  
  140. let return () =
  141. cr := stack.(!sr - 1);
  142. Array.set stack (!sr - 1) stack.(!sr);
  143. subtractOne sr
  144. ;;
  145.  
  146.  
  147. let inputFile = open_in "input.txt" in
  148. try
  149. while true; do
  150. let line = input_line inputFile in
  151. print_endline line;
  152.  
  153. done;
  154. with End_of_file ->
  155. close_in inputFile;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement