Advertisement
Guest User

Python BF Interpreter

a guest
Oct 26th, 2013
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.62 KB | None | 0 0
  1. import sys
  2.  
  3. cachesize = 100
  4.  
  5. cache = [0] * cachesize
  6. pointer = 0
  7. codeindex = 0
  8. loopindex = 0
  9.  
  10. loop = False
  11.  
  12. if len(sys.argv) < 2:
  13.     exit()
  14.  
  15. try:
  16.     f = open(sys.argv[1], 'r')
  17. except IOError:
  18.     print "File not found, aborting."
  19.     raw_input()
  20.     exit()
  21.  
  22. code = f.read()
  23.  
  24. cache[0] = 0
  25.  
  26. codelength = len(code)
  27.  
  28. while codeindex < codelength:
  29.  
  30.     char = code[codeindex]
  31.    
  32.     if char == '>':
  33.         pointer += 1
  34.         if pointer > cachesize:
  35.             print "Error: attempted to exceed cache size"
  36.             raw_input()
  37.             exit()
  38.     elif char == '<':
  39.         pointer -= 1
  40.         if pointer < 0:
  41.             print "Error: attempted to go below index 0"
  42.             raw_input()
  43.             exit()
  44.     elif char == '.':
  45.         sys.stdout.write(str(chr(cache[pointer])))
  46.     elif char == '+':
  47.         cache[pointer] += 1
  48.         if cache[pointer] > 255:
  49.             print "Error: attempted to exceed byte value"
  50.             raw_input()
  51.             exit()
  52.     elif char == '-':
  53.         cache[pointer] -= 1
  54.         if cache[pointer] < 0:
  55.             print "Error: attempted to generate negative value"
  56.             raw_input()
  57.             exit()
  58.     elif char == ',':
  59.         cache[pointer] = ord(raw_input("Input: ")[0])
  60.     elif char == '[':
  61.         loop = True
  62.         loopindex = codeindex
  63.     elif char == ']':
  64.         if not loop:
  65.             print "Error: ended non-existant loop"
  66.             raw_input()
  67.             exit()
  68.         elif cache[pointer] != 0:
  69.             codeindex = loopindex
  70.             continue
  71.    
  72.     codeindex += 1
  73.  
  74. f.close()
  75. raw_input()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement