1

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

goto label;

:: label ::
print "skipped";

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

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

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

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

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

以这种方式分离正文语句的局限性在于访问不同部分中定义的变量和函数......那么,有没有一个想法或答案?如果将它们转换为 ECMAScript,就不可能有稳定的标签吗?

4

1 回答 1

1

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

比较 ECMAScript 规范的第 72-74 页。#3 of 2000-03-24 看看它应该在 ES3 中工作,或者只是看一下这个关于 goto in JS 的问题的答案。像在 'net 上的往常一样,那里引用的 URL 已经死了,但你可以在很棒的 Internet 档案中获得summerofgoto.com [存档]。(传出的 GitHub 链接也已失效,但脚本也已存档:parseScripts.jsgoto.min.jsgoto.js。)

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

于 2016-10-12T23:38:00.593 回答