JavaScript版Brainfuck解释器嵌套循环无限循环问题排查
问题排查:Brainfuck解释器嵌套循环无限循环问题
核心错误点
你的解释器处理]指令时的循环变量更新逻辑存在问题:当遇到]且当前内存单元值不为0时,你把i设为栈中保存的[的索引,但for循环会自动执行i++,导致实际跳转到[的下一个位置,直接跳过了[的条件判断,彻底打乱了循环的退出逻辑,最终引发无限循环。
修复方案
修改]指令的处理代码,将i设置为栈顶值后手动减1,抵消for循环自动的i++,确保下一次循环能准确回到[的位置执行判断:
case ']': if (this.memory[this.pointer] !== 0) { // 手动减1,抵消for循环的i++,保证回到[的位置 i = this.loopStack[this.loopStack.length - 1] - 1; } else { this.loopStack.pop(); } break;
额外小问题修复
Compile函数里存在变量引用错误,你用了this.output,但这里的this指向Compile函数本身,应该使用局部变量output:
document.getElementById('output_field').innerText = output;
修复后验证
修复完成后,运行你提供的嵌套循环Brainfuck代码:
+[-[<<[+[--->]-[<<<]]]>>>->]>-.-.---.>..>.<<<<<-.<.+.>>>>>>.>.<.<-.
将正确输出hello world,与在线编译器结果一致。
内容的提问来源于stack exchange,提问作者Laczkó Lajos
相关产品推荐
相关产品推荐

