def mainloop(program,bracket_map): tape = Tape() pc = 0 while pc < len(program): code = program[pc] if code == ">": tape.advance() elif code == "<": tape.devance() elif code == "+": tape.inc() elif code == "-": tape.dec() elif code == ".": sys.stdout.write(chr(tape.get())) elif code == ",": tape.set(ord(sys.stdin.read(1))) elif code == "[" and tape.get() == 0: pc = bracket_map[pc] elif code == "]" and tape.get() != 0: pc = bracket_map[pc] pc += 1
def mainloop(program, bracket_map): pc = 0 tape = Tape() while pc < len(program): jitdriver.jit_merge_point(pc=pc, tape=tape, program=program,bracket_map=bracket_map) code = program[pc] if code == ">": tape.advance() elif code == "<": tape.devance() elif code == "+": tape.inc() elif code == "-": tape.dec() elif code == ".": # print os.write(1, chr(tape.get())) elif code == ",": # read from stdin tape.set(ord(os.read(0, 1)[0])) elif code == "[" and tape.get() == 0: # Skip forward to the matching ] pc = bracket_map[pc] elif code == "]" and tape.get() != 0: # Skip back to the matching [ pc = bracket_map[pc] pc += 1
program = [c for c in f.read() if c in "<>,.-+[]"] f.close() prog_tape = Tape(program, right_infinite=False) data_tape = Tape([0], 3) tapes = Tapes((prog_tape, data_tape)) PROG = 0 DATA = 1 STEP_TIME = 0.2 SEEK_TIME = 0.05 while 1: time.sleep(STEP_TIME) c = prog_tape.get() if c == "<": tapes.move_left(DATA) print 1 elif c == ">": tapes.move_right(DATA) elif c == ".": tapes.putc(chr(data_tape.get())) elif c == ",": tapes.update(DATA, ord(sys.stdin.read(1))) elif c == "+": tapes.update(DATA, (data_tape.get() + 1) % 256) elif c == "-": tapes.update(DATA, (data_tape.get() - 1) % 256)