是否有一种方法可以将Lua标签转换为ECMAScript3?

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

goto label;

:: label ::
print "skipped";

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

一些语句
标签(和语句)
其他标签(和语句)

以此类推。每个具有身体(或程序块)的语句都会得到这样的部分列表。每个标签的每个部分都应该在某个地方存储其名称(例如,在其自己的部分对象内,作为一个属性)。

每个部分都将是一个函数或将在自身上存储一个函数,以便按顺序执行它们与其他部分。

一个goto语句将查找它特定的标签来运行它的语句,并调用一个ES返回语句来停止当前语句的执行。

这种方式将身体语句分开的限制是访问在不同部分定义的变量和函数......那么,这个问题有没有想法或答案?将它们转换为 ECMAScript 后是否不可能有稳定的标签?

点赞
用户805875
用户805875

我不太明白你的想法,但似乎别人已经解决了这个问题:JavaScript 允许带有标签的 continue,与虚拟的 while 循环一起,允许在函数内模拟 goto。 (除非我忘了什么,这就是 Lua 所需要的全部。)

对比 ECMAScript 规范 ed.#3 2000-03-24 的第 72-74 页,以查看它在 ES3 中应该可行,或者只需查看例如此答案中关于 JS 中 goto 的问题的答案。像往常一样,在网上,那里引用的 URL 已经失效,但是您可以在令人敬畏的互联网档案馆中获取 summerofgoto.com[archived]。 (传出 GitHub 链接也已失效,但脚本也已存档:parseScripts.jsgoto.min.jsgoto.js。)

我希望这足以让事情顺利进行,祝你好运!

2016-10-12 23:38:00