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!