ForeverDev

Untitled

Oct 18th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. local loop = {false, {}}
  2. local pointer = 1
  3. local data = {}
  4. for index = 1, 32 do
  5. data[index] = 0
  6. end
  7.  
  8. function customHandleChar(perform)
  9. repeat
  10. for special in perform:gmatch(".") do
  11. if special == "+" then
  12. data[pointer] = data[pointer] + 1
  13. elseif special == "-" then
  14. data[pointer] = data[pointer] - 1
  15. elseif special == ">" then
  16. pointer = pointer + 1
  17. elseif special == "<" then
  18. pointer = pointer - 1
  19. elseif special == "," then
  20. data[pointer] = io.read():sub(1, 1):byte()
  21. elseif special == "." then
  22. io.write(string.char(data[pointer > 0 and pointer or 32]))
  23. end
  24. end
  25. until data[pointer] == 0
  26. end
  27.  
  28. function handleChar(char)
  29. if not loop[1] then
  30. if char == "[" then
  31. loop[1] = true
  32. elseif char == "+" then
  33. data[pointer] = data[pointer] + 1
  34. elseif char == "-" then
  35. data[pointer] = data[pointer] - 1
  36. elseif char == ">" then
  37. pointer = pointer + 1
  38. elseif char == "<" then
  39. pointer = pointer - 1
  40. elseif char == "," then
  41. data[pointer] = io.read():sub(1, 1):byte()
  42. elseif char == "." then
  43. io.write(string.char(data[pointer > 0 and pointer or 32]))
  44. end
  45. else
  46. if char == "]" then
  47. customHandleChar(table.concat(loop[2]))
  48. loop[1] = false
  49. loop[2] = {}
  50. else
  51. table.insert(loop[2], char)
  52. end
  53. end
  54. end
  55.  
  56. function run(code)
  57. code = code:gsub("/%*.-%*/", "")
  58. for char in code:gmatch(".") do
  59. handleChar(char)
  60. end
  61. end
  62.  
  63. run([[
  64.  
  65. +++++ +++++ [ /* set [1] to 10, loop until [1] == 0 */
  66. >+++++ ++ /* increase [2] by 7 */
  67. >+++++ +++++ /* increase [3] by 10 */
  68. >+++++ +++++ + /* increase [4] by 11 */
  69. <<<- /* go back to [1] and decrease by 1 */
  70. ]
  71. >++ . /* increase [2] by 2, reaching 'H', then print it. */
  72. >+ . /* increase [3] by 1, reaching 'e', then print it. */
  73. >-- .. /* decrease [4] by 2, reaching 'l', then print it twice. */
  74. +++ . /* increase [4] by 3, reaching 'o', then print it. */
  75.  
  76. ]])
Advertisement
Add Comment
Please, Sign In to add comment