gpt4 book ai didi

algorithm - brainfuck 解释器的状态图

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:54:10 24 4
gpt4 key购买 nike

我写了一个 brainfuck ide 的 alpha 版本。我写了自己的解释器,虽然我从我的老师那里得到了关于代码循环的大量帮助,因为我很难以“IT 方式”理解它。现在对于我的报告,我需要解释器算法的状态图,他如何处理每个字符。

我想出了下图,唯一缺少的是解释器如何处理循环。我看了我老师几乎自己写的代码,但我不明白。我希望你能在这里为我指出正确的方向,我不想要一个完整的答案,只是一些旁注,当在代码中遇到 [ 或 ] 时正在做什么。

enter image description here

codeZeiger = codePointer(在代码中移动的指针)
memoryZeiger = memoryPointer(在内存堆栈中移动的指针)
memory = 内存栈
代码 = 作为字符串对象的代码
i = interpre() 方法的计数器(从字符串中读取单个字符,然后通过状态图如下所示的 switch 语句进行解析)

enter image description here

最佳答案

你真的应该试着理解循环机制。在 brainfuck 中,循环包含在 [] 中。这意味着如果满足特定条件,括号内的代码将执行并重新开始。例如:

1: [
2: cmd1
3: cmd2
4: ]
5: cmd3

第 1 行检查 memory[memoryZeiger] 是否等于 0。如果是,则跳转到第 5 行。如果不是,则执行 cmd1、cmd2,依此类推,直到第 4 行。如果您的解释器在第 4 行,它会自动跳转到第 1 行(或者它可以检查条件并进一步移动 - 但让我们保持简单并假设它跳转到第 1 行)。然后整个过程重新开始。

所以回答你关于状态图的问题。你需要这样的东西:

     _____________________________
| code[codeZeiger] == '[' |
-----------------------------
/ \
/ \
memory[memoryZeiger] == 0 memory[memoryZeiger] != 0
| |
"go to matching ']'" codeZeiger++

]的另一种情况应该是等价的。

顺便说一句,“匹配]”很重要。这些括号可以嵌套!

关于algorithm - brainfuck 解释器的状态图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com