Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys, time
- cachesize = 1000
- cache = [0] * cachesize
- pointer = 0
- codeindex = 0
- loopindices = []
- valid = [
- 'G',
- ' '
- ]
- loop = False
- f_ = False
- debug = not "-nodebug" in sys.argv
- numbers = "-numeric" in sys.argv
- print "ICE'S GGGGGG INTERPRETER v1.0\n-------------------------\n"
- if len(sys.argv) < 2:
- coderaw = raw_input("No program selected; input code: ")
- else:
- try:
- f = open(sys.argv[1], 'r')
- except IOError:
- print "File not found, aborting."
- raw_input()
- exit()
- f_ = True
- coderaw = f.read()
- for char in coderaw:
- if char not in valid:
- print "Invalid characters, aborting."
- raw_input()
- exit()
- code = coderaw.split(" ")
- codelength = len(code)
- starttime = int(round(time.time() * 1000))
- while codeindex < codelength:
- char = code[codeindex]
- if len(char) == 1:
- pointer += 1
- if pointer > cachesize:
- print "Error: attempted to exceed cache size"
- raw_input()
- exit()
- elif len(char) == 2:
- pointer = pointer - 1
- if pointer < 0:
- print "Error: attempted to go below index 0"
- raw_input()
- exit()
- elif len(char) == 3:
- if not numbers:
- sys.stdout.write(str(chr(cache[pointer])))
- else:
- sys.stdout.write(str(cache[pointer]) + " ")
- elif len(char) == 4:
- cache[pointer] += 1
- if cache[pointer] > 255:
- print "Error: location " + str(pointer) + " attempted to exceed byte value"
- raw_input()
- exit()
- elif len(char) == 5:
- cache[pointer] -= 1
- if cache[pointer] < -255:
- print "Error: location " + str(pointer) + " attempted attempted to create negative value"
- raw_input()
- exit()
- elif len(char) == 6:
- inp = raw_input("Input: ")
- if len(inp) > 0:
- cache[pointer] = ord(inp[0])
- else:
- cache[pointer] = 0
- elif len(char) == 7:
- loop = True
- loopindices.append(codeindex)
- elif len(char) == 8:
- if not loop:
- print "Error: ended non-existent loop"
- raw_input()
- exit()
- elif cache[pointer] > 0:
- codeindex = loopindices.pop()
- continue
- else:
- loopindices.pop()
- cache[pointer] = 0
- else:
- pointer = len(char) - 9
- if pointer > cachesize:
- print "Error: attempted to exceed cache size"
- raw_input()
- exit()
- if pointer < 0:
- print "Error: attempted to go below index 0"
- raw_input()
- exit()
- codeindex += 1
- print "\n\nProgram terminated after " + str(int(round(time.time() * 1000) - starttime)) + " milliseconds at index " + str(pointer) + "\n"
- if debug:
- print "Memory locations:\n"
- for i in xrange(0, 10):
- print "Location " + str(i) + ": " + str(cache[i])
- if f_:
- f.close()
- raw_input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement