У меня есть большая куча устаревшего кода на старом придуманном мной языке сценариев, который мы компилируем / переводим в javascript.
В этом языке есть условный переход, переход к метке. Отличие от обычного оператора goto в том, что обратный переход невозможен. В этом языке нет вложенных операторов if или циклов.
Поскольку goto не существует в javascript, я ищу алгоритм, который преобразует 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:
Можно переписать как:
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;
}
Однако мне не удалось вывести из этого общий алгоритм.