none-None1

Brainf*ck (a language named brainf*ck but not BF) interpreter

Jan 25th, 2024
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.09 KB | None | 0 0
  1. # See esolang wiki: https://esolangs.org/wiki/Brainf_ck for specification
  2. import sys
  3.  
  4. # Code:
  5. def brainf_ck(code,stack):
  6.     code=''.join(filter(lambda x:x in '+-,.[]<>',code))
  7.     if code=='+':
  8.         return 1
  9.     if code=='-':
  10.         return stack.pop()
  11.     if code==',':
  12.         c=sys.stdin.read(1)
  13.         if c:
  14.             return ord(c)
  15.         else:
  16.             return 0
  17.     if code=='.':
  18.         print(chr(stack[-1]),end='')
  19.         return stack[-1]
  20.     code = code.replace('>[', '(').replace(']<', ')')  # Make instructions 1 byte
  21.     parts=[]
  22.     ip=0
  23.     while ip<len(code):
  24.         i=code[ip]
  25.         if i=='+':
  26.             parts.append('+')
  27.             ip+=1
  28.         if i=='-':
  29.             parts.append('-')
  30.             ip+=1
  31.         if i==',':
  32.             parts.append(',')
  33.             ip+=1
  34.         if i=='.':
  35.             parts.append('.')
  36.             ip+=1
  37.         if i=='(':
  38.             m=1
  39.             t='('
  40.             while m:
  41.                 ip+=1
  42.                 if code[ip]=='(':
  43.                     m+=1
  44.                 if code[ip]==')':
  45.                     m-=1
  46.                 t+=code[ip]
  47.             parts.append(t)
  48.             ip+=1
  49.         if i=='[':
  50.             m=1
  51.             t='['
  52.             while m:
  53.                 ip+=1
  54.                 if code[ip]=='[':
  55.                     m+=1
  56.                 if code[ip]==']':
  57.                     m-=1
  58.                 t+=code[ip]
  59.             parts.append(t)
  60.             ip+=1
  61.     if len(parts)==1:
  62.         if code[0]=='(':
  63.             stack.append(brainf_ck(code[1:-1].replace('(','>[').replace(')',']<'),stack))
  64.             return stack[-1]
  65.         else:
  66.             while stack and stack[-1]:
  67.                 brainf_ck(code[1:-1].replace('(','>[').replace(')',']<'),stack)
  68.             return 0
  69.     else:
  70.         su=0
  71.         for i in parts:
  72.             k=brainf_ck(i.replace('(','>[').replace(')',']<'),stack)
  73.             su+=k
  74.             su&=255
  75.         return su
  76.  
  77. # Usage:
  78. brainf_ck('<code>',[])
  79.  
  80. # You may extend Python's recursion limit if you want:
  81. sys.setrecursionlimit(10000)
Advertisement
Add Comment
Please, Sign In to add comment