Advertisement
NaZaRa

Brainfuck interpreter xd

Sep 22nd, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.06 KB | None | 0 0
  1. Sarr = 0
  2. Sfmp = 0
  3. Sptr = 0
  4. Smax = 0
  5. Sfpt = 0
  6.  
  7. def Sinit():
  8.     Sarr = list()
  9.     Sfmp = list()
  10.     Sptr = 0
  11.     Smax = 0
  12.     Sfpt = 0
  13.  
  14. def Srun(prgm,bdmm=0,bdcp=0,ovflcr=True):
  15.     i = 0
  16.     while i < len(prgm) and prgm[i]:
  17.         if prgm[i] == ">":
  18.             if Smax < bdmm or bdmm == 0:
  19.                 Sptr = Sptr + 1
  20.             elif ovflcr:
  21.                 return -1
  22.             if Sptr > (Smax - 1):
  23.                 Smax = Smax + 1
  24.                 Sarr[Sptr] = 0
  25.         if prgm[i] == "<":
  26.             if Sptr > 0:
  27.                 Sptr = Sptr - 1
  28.             elif ovflcr:
  29.                 return -1
  30.         if prgm[i] == "+":
  31.             if Sarr[Sptr] < bdcp or bdmm == 0:
  32.                 Sarr[Sptr] = Sarr[Sptr] + 1
  33.             elif ovflcr:
  34.                 return -1
  35.         if prgm[i] == "-":
  36.             if Sarr[Sptr] > 0:
  37.                 Sarr[Sptr] = Sarr[Sptr] - 1
  38.             elif ovflcr:
  39.                 return -1
  40.         if prgm[i] == "[":
  41.             m = 0
  42.             j = 1
  43.             k = i + 1
  44.             t = ""
  45.             while j > 0:
  46.                 if prgm[k] == "[":
  47.                     j = j + 1
  48.                 if prgm[k] == "]":
  49.                     j = j - 1
  50.                 if j > 0:
  51.                     t[m] = prgm[k]
  52.                 if k == len(prgm) - 1:
  53.                     return -1
  54.                 m = m + 1
  55.                 k = k + 1
  56.             Sfmp[Sfpt] = t
  57.             Sfpt = Sfpt + 1
  58.             while Sarr[Sptr] > 0:
  59.                 w = Srun(t,bdmm,bdcp,ovflcr)
  60.                 if w == -1:
  61.                     return -1
  62.                 i = i + w
  63.             i = k + 1
  64.             continue
  65.         if prgm[i] == ",":
  66.             Sarr[Sptr] = eval(input("???"))
  67.             if ovflcr:
  68.                 return -1
  69.             if Sarr[Sptr] >= bdcp:
  70.                 Sarr[Sptr] = bdcp - 1
  71.         if prgm[i] == ".":
  72.             print(str(unichr(Sarr[Sptr])))
  73.         if prgm[i] == "*":
  74.             if i == len(prgm) - 1:
  75.                 if ovflcr:
  76.                     return -1
  77.             elif prgm[i + 1] == ">":
  78.                 prgm[i + 1] = "<"
  79.             elif prgm[i + 1] == "<":
  80.                 prgm[i + 1] = "+"
  81.             elif prgm[i + 1] == "+":
  82.                 prgm[i + 1] = "-"
  83.             elif prgm[i + 1] == "-":
  84.                 prgm[i + 1] == "["
  85.             elif prgm[i + 1] == "[":
  86.                 prgm[i + 1] = "]"
  87.             elif prgm[i + 1] == "]":
  88.                 prgm[i + 1] = "*"
  89.              elif prgm[i + 1] == "*":
  90.                 prgm[i + 1] = ">"
  91.         if prgm[i] == "#":
  92.             i = i + 1
  93.             while i < len(prgm):
  94.                 if prgm[i] == "#":
  95.                     break
  96.                 i = i + 1
  97.         if prgm[i] == "?":
  98.             if Smax < bdmm:
  99.                 Sarr[Sptr] = Smax
  100.             elif ovflcr:
  101.                 return -1
  102.         if prgm[i] == "!":
  103.             if Sarr[Sptr] < Sfpt:
  104.                 i = i + Srun(Sfmp[Sarr[Sptr]],bdmm,bdcp,ovflcr)
  105.             elif ovflcr:
  106.                 return -1
  107.         i = i + 1
  108.     return i
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement