我用一种旧的自我构思的脚本语言得到了大量遗留代码,我们将其编译/转换为javascript.
该语言有条件跳转,跳转到标签.与常见的goto语句的区别在于,不能进行向后跳转.该语言中没有嵌套的if语句和循环.
由于goto中不存在goto,我正在寻找一种转换goto mylabel并mylabel:进入语义等效结构的算法.
我想使用ifs但发现它不是微不足道的,因为goto标签的任意嵌套.
例:
if cond1 goto a
do something1
if cond2 goto b
do something2
a:
do something3
if cond3 goto c
do something4
c:
do something5
b:
Run Code Online (Sandbox Code Playgroud)
可以改写为:
lbl_b=false;
lbl_c=false;
lbl_a = cond1;
if (!cond1) {
do something1;
lbl_b = cond2;
if (!lbl_b) {
do something2;
}
}
if (!lbl_b) {
do something3;
lbl_c = cond3;
if (!lbl_c) {
do something4;
}
do something5;
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法从中推导出一般算法.