Post by microfarad on Jan 20, 2011 2:14:43 GMT
Here I have an unfinished brainfuck interpreter, written in Python, and an unfinished program written in brainfuck...
import sys
class brainfuck():
def __init__(self,ProgOut,ProgIn,ProgMsg):
self.ProgOut = ProgOut
self.ProgIn = ProgIn
self.ProgMsg = ProgMsg
self.Prog = ''
self.Data = {}
self.DP = 0
self.IP = 0
def step(self):
try:
Inst = self.Prog[self.IP]
except:
self.ProgMsg(1)
try:
test = self.Data[self.DP]
except:
self.Data[self.DP] = 0
if (Inst == '>'):
self.DP = self.DP+1
elif (Inst == '<'):
self.DP = self.DP-1
elif (Inst == '+'):
self.Data[self.DP] = self.Data[self.DP]+1
elif (Inst == '-'):
self.Data[self.DP] = self.Data[self.DP]-1
elif (Inst == '.'):
self.ProgOut(self.Data[self.DP])
elif (Inst == ','):
self.Data[self.DP] = self.ProgIn()
elif (Inst == '['):
try:
if (self.Data[self.DP] != 0):
self.IP = self.IP
else:
self.counter = 1
while (self.counter != 0):
self.IP = self.IP+1
if (self.Prog[self.IP] == '['):
self.counter = self.counter+1
elif (self.Prog[self.IP] == ']'):
self.counter = self.counter-1
except:
self.ProgMsg(2)
elif (Inst == ']'):
try:
if (self.Data[self.DP] == 0):
self.IP = self.IP
else:
self.counter = 1
while (self.counter != 0):
self.IP = self.IP-1
if (self.Prog[self.IP] == ']'):
self.counter = self.counter+1
elif (self.Prog[self.IP] == '['):
self.counter = self.counter-1
except:
self.ProgMsg(3)
else:
self.ProgMsg(4)
self.IP = self.IP+1
def ConsoleOut(Msg):
sys.stdout.write(chr(Msg))
def ConsoleIn():
char = ord(input(''))
print(str(char))
return char
def ConsoleMsg(Msg):
print(str(Msg))
Go = False
while True:
Go = True
BF = brainfuck(ConsoleOut,ConsoleIn,ConsoleMsg)
BF.Prog = input('Program: ')
steps = 8000
while ((steps >= 0) and Go):
try:
BF.step()
top = BF.IP+3-1
if (top > (len(BF.Prog)-1)):
top = len(BF.Prog)-1
bottom = BF.IP-3-1
if (bottom < 0):
bottom = 0
#(repr(BF.Data)+'\t'+repr(BF.DP)+'\t'+BF.Prog[bottom:BF.IP-1]+' '+BF.Prog[BF.IP-1]+' '+BF.Prog[BF.IP:top+1])
except:
print('Error')
Go = False
steps = steps - 1
++++++++++[>+++>+++++++>++++++++>++++++++++>+++++++++++>++++++++++++<<<<<<-]+[->>-.>>>/>----.<<+.>++++.<<<<++.>>+++.<<.>>>>>.<---.<<<<.>>>>>-.+.<.>--.<<.<<<.>>>>.>.<<<<<.>>-.<<.>>>>>++.<.<<<<.>>>>+++.<.>>.<.<++++.----.>>++.<<.<<<<++++++++++.---------->-->+>-->->---->++>++++[>++++<-]>[>+++++<-]>++>,<[->-<]>[>,<-]+[>.<-]<<<<<<<<<<+]