是否有将 Lua 标签转译为 ECMAScript3 的解决方案?

Is there a solution for transpiling Lua labels to ECMAScript3?

我正在重新构建一个 Lua 到 ES3 的转译器(一个将 Lua 转换为跨浏览器 JavaScript 的工具)。在我开始将我的想法花在这个转译器上之前,我想问一下是否可以将 Lua 标签转换为 ECMAScript 3。例如:

goto label;

:: label ::
print "skipped";

我的第一个想法是将每个语句体分成几个部分,例如,当有一个标签时,它的下一个语句必须作为一个完整的下一部分存储:

some body
label (& statements)
other label (& statements)

等等。每个有主体(或程序块)的语句都会得到一个这样的部分列表。标签的每个部分都应该将其名称存储在某个地方(例如,在它自己的部分对象中,在 属性 内)。

每个部分都是一个函数,或者会在其自身上存储一个函数,以便相对于其他部分按顺序执行。

goto 语句会在 运行 其语句中查找其特定标签并调用 ES return 语句来停止当前语句的执行。

以这种方式分隔主体语句的局限性是访问定义在不同部分的变量和函数...那么,对此有什么想法或答案吗?转成ECMAScript是不是就不可能有稳定的标签了?

我不能完全理解你的想法,但似乎有人已经解决了这个问题:JavaScript 允许标记为 continues,结合虚拟 while 循环,允许在函数中模拟 goto。 (除非我忘记了什么,这应该是 Lua 所需要的全部内容。)

比较 ECMAScript 规范的第 72-74 页。 #3 of 2000-03-24 看看它应该在 ES3 中工作,或者只是看看例如this answer to a question about goto in JS. As usual on the 'net, the URLs referenced there are dead but you can get summerofgoto.com [archived] at the awesome Internet Archive. (Outgoing GitHub link is also dead, but the scripts are also archived: parseScripts.js, goto.min.js or goto.js.)

我希望这足以得到东西运行,祝你好运!