我知道我可以使用
for
或 while
语句在 if/else
或 break
循环内翻译简单的 GOTO。 我的问题是尝试编写一个“翻译器”函数,该函数自动转换 FOCAL 三元 IF 语句,例如 IF (x-5) 3.1, 4, 6.2
,其中这些数字表示 GOTO 代码中其他位置的指定行号。if{} else if{} else{}
输出代码的每个部分中。 但即便如此,翻译算法能否“知道”何时停止加载输入代码行? 例如,其中一个“块”可以有另一个 IF 语句。
“算术 IF”。好久没看到其中一个了...:)
如果您确实想“移动”代码,某些程序将无法“去spaghetabilized”(除非,也许在某些众所周知的条件下)。例如,假设您有一个在两个(或多个)IF 之间来回的无限循环。
但是,如果您选择过程/模块化方法(不是“移动”目标代码,而是将其放在单独的例程中并调用它),并且您的目标语言允许递归,那么它可能会起作用(至少,直到您真正耗尽计算机资源)。