Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.78 KB | None | 0 0
  1. class
  2. {
  3. New(fileName)
  4. {
  5. .tokenizing = Tokenizing(fileName)
  6. .space = ""
  7. .result = ""
  8. }
  9.  
  10. addSpace()
  11. {
  12. .space $= " "
  13. }
  14.  
  15. subSpace()
  16. {
  17. .space = .space.Substr(4)
  18. }
  19.  
  20. writeClass()
  21. {
  22. .tokenizing.Advance()
  23. .result $= "\n" $ .space $ "<class>"
  24. .addSpace()
  25.  
  26. .writeTag("class","keyword")
  27. .tokenizing.Advance()
  28. .writeTag(.tokenizer.Token(), "identifier")
  29. .tokenizing.Advance()
  30. .writeTag(.tokenizer.Token(), "symbol")// write {
  31.  
  32. .tokenizing.Advance()
  33. while(.tokenizer.Token() is "static" or .tokenizer.Token() is "field"){
  34. .writeClassVarDec()//ToDo
  35. .tokenizing.Advance()
  36. }
  37.  
  38. while(.tokenizer.Token() is "constructor"
  39. or .tokenizer.Token() is "function"
  40. or.tokenizer.Token() is "method"){
  41. .writeSubRoutine()//ToDo
  42. .tokenizing.Advance()
  43. }
  44. .writeTag(.tokenizer.Token(), "symbol")// write }
  45. .subSpace()
  46. .result $= "\n" $ .space $ "</class>"
  47. }
  48.  
  49. writeClassVarDec()
  50. {
  51. .result $= "\n" $ .space $ "<classVarDec>"
  52. .addSpace()
  53.  
  54. .writeTag(.tokenizer.Token(),"keyword")// var
  55.  
  56. .tokenizing.Advance()
  57. .writeTag(.tokenizer.Token(),"type")
  58.  
  59. .tokenizing.Advance()
  60. .writeTag(.tokenizer.Token(),"identifier")
  61.  
  62. .tokenizing.Advance()
  63. while(.tokenizer.Token() is "," )
  64. {
  65. .writeTag(.tokenizer.Token(),"symbol")
  66. .tokenizing.Advance()
  67. .writeTag(.tokenizer.Token(),"identifier")
  68. .tokenizing.Advance()
  69. }
  70.  
  71. .writeTag(.tokenizer.Token(),"symbol") // write ;
  72. .subSpace()
  73. .result $= "\n" $ .space $ "</classVarDec>"
  74. }
  75.  
  76. writeTag(terminal,type)
  77. {
  78. .result $= "\n" $ .space $ "<" $ type $ ">" $ terminal $ "</" $ type $ ">"
  79. }
  80.  
  81. writeSubRoutine()
  82. {
  83. .result $= "\n" $ .space $ "<subroutineDec>"
  84. .addSpace()
  85. .writeTag(.tokenizer.Token(),"keyword")//ect. method
  86. .tokenizing.Advance()
  87. .writeTag(.tokenizer.Token(),"keyword")//ect. void,int
  88. .tokenizing.Advance()
  89. .writeTag(.tokenizer.Token(),"identifier")
  90. .writeTag(.tokenizer.Token(),"symbol") // write (
  91. .writeParameterList()
  92. .writeTag(.tokenizer.Token(),"symbol") // write )
  93. .writeSubroutineBody()
  94. .subSpace()
  95. .result $= "\n" $ .space $ "</subroutineDec>"
  96. }
  97. writeParameterList()
  98. {
  99. .result $= "\n" $ .space $ "<parameterList>"
  100. .addSpace()
  101. .tokenizing.Advance()
  102. if(.tokenizer.Token() isnt ")")
  103. {
  104. .writeTag(.tokenizer.Token(),"keyword")//type
  105. .tokenizing.Advance()
  106. .writeTag(.tokenizer.Token(),"identifier")
  107. .tokenizing.Advance()
  108. while(.tokenizer.Token() is "," )
  109. {
  110. .writeTag(.tokenizer.Token(),"symbol")
  111. .tokenizing.Advance()
  112. .writeTag(.tokenizer.Token(),"keyword")//type
  113. .tokenizing.Advance()
  114. .writeTag(.tokenizer.Token(),"identifier")
  115. .tokenizing.Advance()
  116. }
  117. }
  118. .subSpace()
  119. .result $= "\n" $ .space $ "</parameterList>"
  120. }
  121. writeSubroutineBody()
  122. {
  123. .result $= "\n" $ .space $ "<subroutineBody>"
  124. .addSpace()
  125. .writeTag(.tokenizer.Token(), "symbol")//write {
  126. .tokenizing.Advance()
  127.  
  128. while(.tokenizer.Token() is "var" )
  129. {
  130. .writeVarDec()
  131. .tokenizing.Advance()
  132. }
  133.  
  134. .writeStatements()
  135. .writeTag(.tokenizer.Token(), "symbol")//write }
  136. .subSpace()
  137. .result $= "\n" $ .space $ "</subroutineBody>"
  138. }
  139.  
  140. writeVarDec()
  141. {
  142. .result $= "\n" $ .space $ "<varDec>"
  143. .addSpace()
  144. .writeTag(.tokenizer.Token(),"keyword")//var
  145. .tokenizing.Advance()
  146. .writeTag(.tokenizer.Token(),"keyword")//type
  147. .tokenizing.Advance()
  148. .writeTag(.tokenizer.Token(),"identifier")
  149. .tokenizing.Advance()
  150. while(.tokenizer.Token() is ",")
  151. {
  152. .writeTag(.tokenizer.Token(), "symbol")//write ,
  153. .tokenizing.Advance()
  154. .writeTag(.tokenizer.Token(),"keyword")//type
  155. .tokenizing.Advance()
  156. .writeTag(.tokenizer.Token(),"identifier")
  157. .tokenizing.Advance()
  158. }
  159.  
  160. .writeTag(.tokenizer.Token(), "symbol")//write ;
  161.  
  162. .subSpace()
  163. .result $= "\n" $ .space $ "</varDec>"
  164. }
  165.  
  166. .writeStatements()
  167. {
  168. .result $= "\n" $ .space $ "<statements>"
  169. .addSpace()
  170.  
  171. while(.isKeyword(.tokenizer.Token()))
  172. {
  173. switch .tokenizer.Token()
  174. {
  175. case "if"
  176. .writeIf()
  177. .tokenizing.Advance()
  178. case "let"
  179. .writeLet()
  180. .tokenizing.Advance()
  181. case "while"
  182. .writeWhile()
  183. .tokenizing.Advance()
  184. case "do"
  185. .writeDo()
  186. .tokenizing.Advance()
  187. case "return"
  188. .writeReturn()
  189. .tokenizing.Advance()
  190. }
  191. }
  192.  
  193. .subSpace()
  194. .result $= "\n" $ .space $ "</statements>"
  195. }
  196.  
  197. writeLet()
  198. {
  199. .result $= "\n" $ .space $ "<letStatement>"
  200. .addSpace()
  201.  
  202. .writeTag(.tokenizer.Token(),"keyword")//let
  203. .tokenizing.Advance()
  204. .writeTag(.tokenizer.Token(),"identifier")
  205. .tokenizing.Advance()
  206.  
  207. if .tokenizer.Token() is "["
  208. {
  209. .writeTag(.tokenizer.Token(), "symbol")//write [
  210. .tokenizing.Advance()
  211. .writeExpression()//ToDo
  212. .writeTag(.tokenizer.Token(), "symbol")//write ]
  213. .tokenizing.Advance()
  214. }
  215. .writeTag(.tokenizer.Token(), "symbol")//write =
  216. .tokenizing.Advance()
  217. .writeExpression()
  218. .writeTag(.tokenizer.Token(), "symbol")//write ;
  219.  
  220. .subSpace()
  221. .result $= "\n" $ .space $ "</letStatement>"
  222. }
  223.  
  224. writeIf()
  225. {
  226. .result $= "\n" $ .space $ "<ifStatement>"
  227. .addSpace()
  228.  
  229. .writeTag(.tokenizer.Token(),"keyword")//if
  230. .tokenizing.Advance()
  231. .writeTag(.tokenizer.Token(), "symbol")//write (
  232. .tokenizing.Advance()
  233. .writeExpression()
  234. .writeTag(.tokenizer.Token(), "symbol")//write )
  235. .tokenizing.Advance()
  236. .writeTag(.tokenizer.Token(), "symbol")//write {
  237. .tokenizing.Advance()
  238. .writeStatements()
  239. .writeTag(.tokenizer.Token(), "symbol")//write }
  240.  
  241. .tokenizing.Advance()
  242. if(.tokenizer.Token() is "else")
  243. {
  244. .writeTag(.tokenizer.Token(),"keyword")//else
  245. .tokenizing.Advance()
  246. .writeTag(.tokenizer.Token(), "symbol")//write {
  247. .tokenizing.Advance()
  248. .writeStatements()
  249. .writeTag(.tokenizer.Token(), "symbol")//write }
  250. .tokenizing.Advance()
  251. }
  252. .subSpace()
  253. .result $= "\n" $ .space $ "</ifStatement>"
  254. }
  255.  
  256. writeWhile()
  257. {
  258. .result $= "\n" $ .space $ "<whileStatement>"
  259. .addSpace()
  260.  
  261. .writeTag(.tokenizer.Token(),"keyword")//while
  262. .tokenizing.Advance()
  263. .writeTag(.tokenizer.Token(), "symbol")//write (
  264. .tokenizing.Advance()
  265. .writeExpression()
  266. .writeTag(.tokenizer.Token(), "symbol")//write )
  267. .tokenizing.Advance()
  268. .writeTag(.tokenizer.Token(), "symbol")//write {
  269. .tokenizing.Advance()
  270. .writeStatements()
  271. .writeTag(.tokenizer.Token(), "symbol")//write }
  272.  
  273. .subSpace()
  274. .result $= "\n" $ .space $ "</whileStatement>"
  275. }
  276.  
  277. writeDo()
  278. {
  279. .result $= "\n" $ .space $ "<doStatement>"
  280. .addSpace()
  281.  
  282. .writeTag(.tokenizer.Token(),"keyword")//do
  283. .tokenizing.Advance()
  284. .writeTag(.tokenizer.Token(), "symbol")//write {
  285. .tokenizing.Advance()
  286. .writeStatements()
  287.  
  288. .subSpace()
  289. .result $= "\n" $ .space $ "</doStatement>"
  290. }
  291.  
  292. isKeyword(str)
  293. {
  294. keywords = #["let","if","do","while","return"]
  295. for key in keywords
  296. if str is key
  297. return true
  298. return false
  299. }
  300.  
  301.  
  302. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement