我已经用自己的 BF 解释器在汇编中编写,现在我正在用 Java 编写一个 BF 编译器,它可以编译为汇编代码。
我想实现一个很好的功能,可以检测内存单元数组是否超出范围。数组的一个传统限制是让索引在 中[0, 30000)
,否则[0, inf)
也是常用的。另一种选择是内存是环绕的,所以在第一种情况下,这可能意味着访问索引 30000 意味着访问索引 0。
在我的编译器中,这种检测将在传统编译器的语义分析阶段完成,因此我们已经从语法分析阶段获得了我们的 AST(抽象语法树)。
在尝试为此提出一个结构一段时间后,我发现在 Brainfuck 程序中检测无限循环,连同 BF 的 Wikipedia 页面,我发现带有内存数组的 BF 程序[0, inf)
类似于图灵机。
所以我的问题是,对于这两种情况[0, max)
,[0, inf)
是否可以检测内存指针是否低于零,而在前一种情况下是否低于最大值?显然,在检查它时不会陷入无限循环,我也宁愿避免设置最大执行时间。
额外问题:是否可以检测循环构造[...]
循环的次数?