Exemplo n.º 1
0
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
Exemplo n.º 3
0
Arquivo: vbf.py Projeto: Jonnty/vbf
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)