将 FOCAL 转换为不带 GOTO 的语言:可以通过算法解析具有多个 GOTO 的“if”语句吗?

问题描述 投票:0回答:1

我知道我可以使用

for
while
语句在
if/else
break
循环内翻译简单的 GOTO。 我的问题是尝试编写一个“翻译器”函数,该函数自动转换 FOCAL 三元 IF 语句,例如
IF (x-5) 3.1, 4, 6.2 
,其中这些数字表示 GOTO 代码中其他位置的指定行号。
由于目标行可能会导致其他 IF 语句,甚至返回到原始 IF 语句,算法能否成功地“去意大利面条化”代码,或者这是已知不完整的软件问题之一?
据推测,只有在找到 QUIT 命令(终止程序)时才结束的翻译代码块将最终出现在
if{} else if{} else{}
输出代码的每个部分中。 但即便如此,翻译算法能否“知道”何时停止加载输入代码行? 例如,其中一个“块”可以有另一个 IF 语句。

translate goto focal
1个回答
0
投票

“算术 IF”。好久没看到其中一个了...:)

如果您确实想“移动”代码,某些程序将无法“去spaghetabilized”(除非,也许在某些众所周知的条件下)。例如,假设您有一个在两个(或多个)IF 之间来回的无限循环。

但是,如果您选择过程/模块化方法(不是“移动”目标代码,而是将其放在单独的例程中并调用它),并且您的目标语言允许递归,那么它可能会起作用(至少,直到您真正耗尽计算机资源)。

© www.soinside.com 2019 - 2024. All rights reserved.