我看似功能强大的BF interpereter无法运行标准的BF程序

时间:2016-02-22 02:31:15

标签: python parsing interpreter brainfuck

这是我的interpereter的代码:

program=list(raw_input('Program: '))
array = [0 for i in range(100)]
pointer=0
prgpointer=0
run = True
while run:
    try:
        command = program[prgpointer]
        if command == '>':
            pointer += 1
        if command == '<':
            pointer -= 1
        if command == '+':
            array[pointer]=array[pointer]+1
        if command == '-':
            array[pointer]=array[pointer]-1
        if command == '.':
            print(array[pointer])
        if command == '[' and array[pointer]==0:
            while program[prgpointer]!=']':
                prgpointer+=1
        if command == ']' and array[pointer]!=0:
            while program[prgpointer]!='[':
                prgpointer-=1        
    except:
        run = False  
    prgpointer+=1

当我运行此程序时:

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

我得到

的结果
-1
-3
4
4
7
0
-2
7
10
4
-4
1
1

这个porgram是一个功能性的“你好世界”。程序在任何其他bf interpereter。即使输出转换为ASCII,它也不是“Hello World”。 关于我的interpereter是否有任何重大问题可以指出? 这些命令是否正确?

1 个答案:

答案 0 :(得分:4)

  1. 要在您的数据指针上打印字符值,您需要sys.stdout.write(chr(array[pointer])),否则您只需打印数字 - 所有数字都在列表中的内容之后。

  2. 语言规范指出[]表示跳转到匹配括号。您将跳转到下一个/上一个括号。