我的用于自修改Brainf***的Python解释器有一个bug

我的用于自修改Brainf***的Python解释器有一个bug,python,interpreter,brainfuck,Python,Interpreter,Brainfuck,我为一种叫做(SMBF)的语言编写了这个Python解释器。今天我发现了一个bug,如果程序在初始单元或在磁带上动态创建代码,它将不会被执行。我编写这个解释器是为了尽可能接近链接页面上的Ruby解释器。注意,这个bug可能也存在于原始的Ruby解释器中。我不知道,我没用过 SMBF与普通BF的不同之处在于,源代码放在指针开始的单元格左侧的磁带上。所以程序”: ptr+=1 elif c=='>>>>+\x00!dlroW,olleH') #应该打印句号,但不打印。 数据=字节数组(b'>++++

我为一种叫做(SMBF)的语言编写了这个Python解释器。今天我发现了一个bug,如果程序在初始单元或在磁带上动态创建代码,它将不会被执行。我编写这个解释器是为了尽可能接近链接页面上的Ruby解释器。注意,这个bug可能也存在于原始的Ruby解释器中。我不知道,我没用过

SMBF与普通BF的不同之处在于,源代码放在指针开始的单元格左侧的磁带上。所以程序
”:
ptr+=1
elif c=='>>>>+\x00!dlroW,olleH')
#应该打印句号,但不打印。
数据=字节数组(b'>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
intr=解释器(数据)
intr.call()
#打印(intr.tape.data.decode('ascii').strip('\0'))
如果名称=“\uuuuu main\uuuuuuuu”:
main()
问题是: 这一行是我设置程序的方式(因此我可以在Ideone.com上运行此程序):

程序将添加到单元格中,直到其为46,这是ASCII
的十进制值,它将打印当前单元格(一个句点)。但由于某种原因,程序计数器
pc
从未到达该单元。我希望程序运行它找到的所有代码,直到它到达磁带的末尾,但是我很难让程序计数器考虑到磁带的中心,并确保如果在
\uuuuuu setitem\uuuu
中调整磁带的大小,它仍然是正确的

相关线路是(我正在尝试的):


while-len(self.tape)借助Sp3000找到了解决方案


磁带中的
self.end=0
self.end=max(self.end,index+1)
磁带中的
self.end=0
设置项
并在
解释器中替换
时的
。在pc
时调用
?真的吗?@KarolyHorvath这取决于我。在这个网站上有很多这样做的帖子。你自己找吧。语言名称中有脏话不是我的错,但我将对它进行审查,因为这是我对家庭友好的选择。我读了这个标题,我所能想到的是:“你不要说!”@JimWood我读到了这个评论,我能想到的是:“你不要说!”
data = bytearray(b'++++++++++++++++++++++++++++++++++++++++++++++')
while -len(self.tape) <= pc < 0:
while pc < 0: