BF Brainf*ck Interpreter in Python
自分で書いたやつを見つけたのでアップ
from sys import stdin, stdout # state class Int(object): def __init__(self, v=0): self.val = v def set(self, v): self.val = v; return self.val def inc(self): self.val += 1; return self.val def dec(self): self.val -= 1; return self.val mem = [Int() for i in range(255)] stk = [] ptr = Int() idx = Int(-1) # procedure proc = { '+': lambda: mem[ptr.val].inc(), '-': lambda: mem[ptr.val].dec(), '>': lambda: ptr.inc(), '<': lambda: ptr.dec(), ',': lambda: mem[ptr.val].set(ord(stdin.read(1))), '.': lambda: stdout.write(chr(mem[ptr.val].val)), '[': lambda: stk.append(idx.val), ']': lambda: mem[ptr.val].val != 0 and idx.set(stk[-1]) or stk.pop(), } # interpret bfprog = stdin.read() while len(bfprog) != idx.inc(): proc.get(bfprog[idx.val], lambda:1)()
$ cat a # from http://en.wikipedia.org/wiki/Brainfuck +++++ +++++ initialize counter (cell #0) to 10 [ use loop to set the next four cells to 70/100/30/10 > +++++ ++ add 7 to cell #1 > +++++ +++++ add 10 to cell #2 > +++ add 3 to cell #3 > + add 1 to cell #4 <<<< - decrement counter (cell #0) ] > ++ . print 'H' > + . print 'e' +++++ ++ . print 'l' . print 'l' +++ . print 'o' > ++ . print ' ' << +++++ +++++ +++++ . print 'W' > . print 'o' +++ . print 'r' ----- - . print 'l' ----- --- . print 'd' > + . print '!' > . print '\n' $ python bf.py < a Hello World!