【发布时间】:2013-09-25 22:14:20
【问题描述】:
我听说理论上已经证明可以在图灵完备的语言中仅使用结构化编程结构(条件、循环和循环中断以及子程序调用)来表达任何控制流,而无需任何任意 GOTO陈述。有什么方法可以使用该理论自动将包含GOTOs 的代码重构为不包含GOTOs 的代码?
假设我有一个使用简单命令式语言(例如 C 或 Pascal)的任意单个子例程。我还有一个解析器,它可以验证这个子例程是否有效,并从中生成一个抽象语法树。但是代码包含GOTOs 和标签,它们可以向前或向后跳转到任意点,包括进出条件或循环块,但不能跳出子程序本身。
是否有一种算法可以将此 AST 重新加工成语义相同但不包含任何标签或GOTO 语句的新代码?
【问题讨论】:
-
但是汇编器会用(有条件的)跳转再次替换它!
-
@wildplasser:汇编器无关紧要。我正在尝试将代码从支持 GOTO(并且在其中经常使用)的旧语言转换为不支持 GOTO 但与其他语言相比具有许多技术优势的新语言。我已经可以完成 99% 的工作,但我不知道如何重构 GOTO。
-
@irrelephant:我看到了,但它的范围特别限于仅向前跳跃。我的情况不是,所以不是重复的。
-
提示:如果您需要指标变量,您应该停止。
标签: algorithm language-agnostic goto