Advertisement
Guest User

GGGGGG

a guest
Jan 31st, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.08 KB | None | 0 0
  1. import sys, time
  2.  
  3. cachesize = 1000
  4.  
  5. cache = [0] * cachesize
  6. pointer = 0
  7. codeindex = 0
  8. loopindices = []
  9.  
  10. valid = [
  11. 'G',
  12. ' '
  13. ]
  14.  
  15. loop = False
  16. f_ = False
  17.  
  18. debug = not "-nodebug" in sys.argv
  19. numbers = "-numeric" in sys.argv
  20.  
  21. print "ICE'S GGGGGG INTERPRETER v1.0\n-------------------------\n"
  22.  
  23. if len(sys.argv) < 2:
  24. coderaw = raw_input("No program selected; input code: ")
  25. else:
  26. try:
  27. f = open(sys.argv[1], 'r')
  28. except IOError:
  29. print "File not found, aborting."
  30. raw_input()
  31. exit()
  32. f_ = True
  33.  
  34. coderaw = f.read()
  35.  
  36. for char in coderaw:
  37. if char not in valid:
  38. print "Invalid characters, aborting."
  39. raw_input()
  40. exit()
  41.  
  42. code = coderaw.split(" ")
  43.  
  44. codelength = len(code)
  45.  
  46. starttime = int(round(time.time() * 1000))
  47.  
  48. while codeindex < codelength:
  49. char = code[codeindex]
  50.  
  51. if len(char) == 1:
  52. pointer += 1
  53. if pointer > cachesize:
  54. print "Error: attempted to exceed cache size"
  55. raw_input()
  56. exit()
  57. elif len(char) == 2:
  58. pointer = pointer - 1
  59. if pointer < 0:
  60. print "Error: attempted to go below index 0"
  61. raw_input()
  62. exit()
  63. elif len(char) == 3:
  64. if not numbers:
  65. sys.stdout.write(str(chr(cache[pointer])))
  66. else:
  67. sys.stdout.write(str(cache[pointer]) + " ")
  68. elif len(char) == 4:
  69. cache[pointer] += 1
  70. if cache[pointer] > 255:
  71. print "Error: location " + str(pointer) + " attempted to exceed byte value"
  72. raw_input()
  73. exit()
  74. elif len(char) == 5:
  75. cache[pointer] -= 1
  76. if cache[pointer] < -255:
  77. print "Error: location " + str(pointer) + " attempted attempted to create negative value"
  78. raw_input()
  79. exit()
  80. elif len(char) == 6:
  81. inp = raw_input("Input: ")
  82. if len(inp) > 0:
  83. cache[pointer] = ord(inp[0])
  84. else:
  85. cache[pointer] = 0
  86. elif len(char) == 7:
  87. loop = True
  88. loopindices.append(codeindex)
  89. elif len(char) == 8:
  90. if not loop:
  91. print "Error: ended non-existent loop"
  92. raw_input()
  93. exit()
  94. elif cache[pointer] > 0:
  95. codeindex = loopindices.pop()
  96. continue
  97. else:
  98. loopindices.pop()
  99. cache[pointer] = 0
  100. else:
  101. pointer = len(char) - 9
  102. if pointer > cachesize:
  103. print "Error: attempted to exceed cache size"
  104. raw_input()
  105. exit()
  106. if pointer < 0:
  107. print "Error: attempted to go below index 0"
  108. raw_input()
  109. exit()
  110.  
  111. codeindex += 1
  112.  
  113. print "\n\nProgram terminated after " + str(int(round(time.time() * 1000) - starttime)) + " milliseconds at index " + str(pointer) + "\n"
  114. if debug:
  115. print "Memory locations:\n"
  116. for i in xrange(0, 10):
  117. print "Location " + str(i) + ": " + str(cache[i])
  118.  
  119. if f_:
  120. f.close()
  121. raw_input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement