Execute Brain****/Python
Execute Brain****/Python is an implementation of Brainf***.
Other implementations of Brainf***.
Execute Brain****/Python is part of RCBF. You may find other members of RCBF at Category:RCBF.
Quick implementation of a Brainfuck interpreter in Python.
- !/usr/bin/python
from __future__ import with_statement
import sys
class BrainFuck():
def __init__(self):
self.instructions =
def main(self):
if len(sys.argv[1:]) > 0:
source_file = sys.argv[1]
with open(source_file) as source_handle:
self.instructions = source_handle.read()
else:
print >> sys.stderr, 'No source file.'
sys.exit(2)
self.match_braces()
def match_braces(self):
loops = {}
loop_stack = []
for ptr, instruction in enumerate(self.instructions):
if instruction == '[':
loop_stack.append(ptr)
elif instruction == ']':
startptr = loop_stack.pop()
loops[startptr] = ptr
loops[ptr] = startptr
self.start_interpreting(loops)
def start_interpreting(self, loops):
tape = [0] * 30000
cell = 0
pointer = 0
while pointer < len(self.instructions):
instruction = self.instructions[pointer]
if instruction == '>':
cell += 1
elif instruction == '<':
cell -= 1
elif instruction == '+':
tape[cell] += 1
elif instruction == '-':
tape[cell] -= 1
elif instruction == ',':
tape[cell] = ord(sys.stdin.read(1))
elif instruction == '.':
sys.stdout.write(chr(tape[cell]))
elif instruction == '[' and tape[cell] == 0:
pointer = loops[pointer]
elif instruction == ']' and tape[cell] != 0:
pointer = loops[pointer]
pointer += 1
if __name__ == "__main__":
interpreter = BrainFuck()
interpreter.main()