Brainf_ck in Python
リハビリ。
サンプルプログラムは拾ってきました。
import array import re import sys def bf_exec(code, mem_size=1024): memory = array.array('B', [0] * mem_size) length = len(code) pc = 0 pointer = 0 while pc < length : inst = code[pc] if inst == '>': pointer += 1 elif inst == '<': pointer -= 1 elif inst == '+': memory[pointer] += 1 elif inst == '-': memory[pointer] -= 1 elif inst == '.': c = memory[pointer] sys.stdout.write("%c" % c) elif inst == ',': c = sys.stdin.read(1) memory[pointer] = ord(c) elif inst == '[': if memory[pointer] == 0: level = 1 while level: pc += 1 inst = code[pc] if inst == '[': level += 1 elif inst == ']': level -= 1 elif inst == ']': if not memory[pointer] == 0: level = 1 while level: pc -= 1 inst = code[pc] if inst == '[': level -= 1 elif inst == ']': level += 1 pc -= 1 pc += 1 if __name__ == '__main__': helloworld = """ +++++++++[>++++++++>+++++++++++>+++++<<<-]>. >++.+++++++..+++.>-.------------.<++++++++. --------.+++.------.--------.>+. """ # Metacircular interpretor of Brainf*ck. '!' is used as execution tirgger. metacircular = """ >>>+[[-]>>[-]++>+>+++++++[<++++>>++<-]++>>+>+>+++++[>++>++++++<<-]+>>>,<++[[>[ ->>]<[>>]<<-]<[<]<+>>[>]>[<+>-[[<+>-]>]<[[[-]<]++<-[<+++++++++>[<->-]>>]>>]]<< ]<]<[[<]>[[>]>>[>>]+[<<]<[<]<+>>-]>[>]+[->>]<<<<[[<<]<[<]+<<[+>+<<-[>-->+<<-[> +<[>>+<<-]]]>[<+>-]<]++>>-->[>]>>[>>]]<<[>>+<[[<]<]>[[<<]<[<]+[-<+>>-[<<+>++>- [<->[<<+>>-]]]<[>+<-]>]>[>]>]>[>>]>>]<<[>>+>>+>>]<<[->>>>>>>>]<<[>.>>>>>>>]<<[ >->>>>>]<<[>,>>>]<<[>+>]<<[+<<]<] """ countdown = """ ++++++++++++++++++++++++++++++++[>+>+<<-] >>+++++++++++++++++++++++++<<++++++++++ [>>.-<.<-] >>-.<.>.<.>.<. >++++++++++++++++++++++. +++++++++++++++++++++++++++++++++++++++++++.-.---------.>++++++++++. """ bf_exec(helloworld) bf_exec(countdown) bf_exec(metacircular)