我有一大堆遗留代码以旧的自我构想的脚本语言编译/转换为javascript。重写修改后的goto语义的算法
该语言有条件跳转,跳转到标签。与常见的goto语句不同之处在于,没有后向跳转是可能的。没有嵌套的if语句或该语言中的循环。
由于goto在javascript中不存在,我正在寻找一种将goto mylabel
和mylabel:
转换为语义等效结构的算法。
我想到了使用ifs
,但发现它并不重要,因为任意嵌套goto标签。
实施例:
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;
}
然而,我无法从该导出通用算法:
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:
能作为被重写。
一般goto删除解决方案是在“Taming Control Flow”论文中引用的:http://stackoverflow.com/questions/14061856/automated-goto-removal-algorithm –