brainfuck intepreter打印错误

时间:2018-02-25 10:55:05

标签: python python-3.x brainfuck

我最近决定尝试编码"还有另一个" brainfuck解释器,但我有一个问题。它打印出错误的数字,当它应该打开我们的问候,世界!有谁知道为什么会这样?提前致谢!我无法弄清楚为什么要这样做。请帮忙!我只是个初学者。抱歉编码风格不好,但请不要改变整个事情。我宁愿收到提示。

from copy import copy
import sys

def brainfuckintepreter(program):
    # find pairs of brackets
    brackets = {}
    bbrackets = {}
    def findmatchingclosingbracket(ctr):
        level = 0
        if program[ctr] == '[':
            while True:
                if program[ctr] == '[':
                    level += 1
                elif program[ctr] == ']':
                    level -= 1
                if level == 0:
                    return ctr
                    break
                ctr += 1

    def findmatchingopeningbracket(ctr):
        level = 0
        if program[ctr] == ']':
            while True:
                if program[ctr] == '[':
                    level -= 1
                elif program[ctr] == ']':
                    level += 1
                if level == 0:
                    return ctr
                    break
                ctr -= 1
    """
    ctr = 0
    for a in program:
        if a == '[':
            f = copy(findmatchingclosingbracket(ctr))
            brackets[ctr] = f
            bbrackets[f] = ctr
        ctr += 1

    print(brackets)
    print(bbrackets)
    """
    # running the program
    tape = [0] * 3000
    pointer = 1500
    counter = 0
    results = ""
    valid = True
    while counter != len(program) and valid:
        a = program[counter]
        # move right
        if a == '>':
            if pointer == len(tape) - 1:
                tape.append(0)
            pointer += 1
        # move left
        elif a == '<':
            if pointer == 0:
                raise ValueError("On index ", counter, ", the program tried to move to -1 on the tape")
                valid = False
                return valid
            else:
                pointer -= 1
        # increment
        elif a == '+':
            if tape[pointer] == 255:
                tape[pointer] = 0
            else:
                tape[pointer] += 1
        # decrement
        elif a == '-':
            if tape[pointer] == 0:
                tape[pointer] = 255
            else:
                tape[pointer] -= 1
        # output character
        elif a == '.':
            t = chr(tape[pointer])
            results += t
            print(t, end='')
        # input character
        elif a == ',':
            tape[pointer] = ord(sys.stdin.read(1))
        # opening bracket
        elif a == '[':
            if tape[pointer] == 0:
                pointer = findmatchingclosingbracket(pointer)
        # closing bracket
        elif a == ']':
            if tape[pointer] != 0:
                pointer = findmatchingopeningbracket(counter)
        counter += 1
        """
        for b in tape:
            if b != 0:
                print(b)
        """





brainfuckintepreter('++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.')

编辑:

我在修改后更改了我的代码,但同样的问题。

0 个答案:

没有答案