Tengo un gran grupo de código heredado en un antiguo lenguaje de scripts auto-concebido que compilamos/traducimos a javascript.Algoritmo para reescribir la semántica de goto modificada
Ese idioma tiene un salto condicional, saltando a una etiqueta. La diferencia con la declaración goto común es que no son posibles saltos hacia atrás. No hay sentencias if anidadas ni bucles en ese idioma.
Como goto no existe en javascript, estoy buscando un algoritmo que transforme goto mylabel
y mylabel:
en una estructura semánticamente equivalente.
Pensé en usar ifs
pero no me pareció trivial debido a la anidación arbitraria de las etiquetas goto.
Ejemplo:
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:
podría reescribirse como:
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;
}
Sin embargo, no fue capaz de derivar un algoritmo general de eso.
La solución general de eliminación de goto se proporciona en el documento "Flujo de control de Taming" citado aquí: http://stackoverflow.com/questions/14061856/automated-goto-removal-algorithm –