【问题标题】:Is there a solution for transpiling Lua labels to ECMAScript3?是否有将 Lua 标签转换为 ECMAScript3 的解决方案?
【发布时间】:2016-10-13 07:38:00
【问题描述】:

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

goto label;

:: label ::
print "skipped";

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

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

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

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

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

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

【问题讨论】:

    标签: lua ecmascript-3


    【解决方案1】:

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

    比较 ECMAScript 规范的第 72-74 页。 #3 of 2000-03-24 看看它应该在 ES3 中工作,或者只是看看例如this answer to a question about goto in JS。与 'net 上的往常一样,那里引用的 URL 已失效,但您可以在很棒的 Internet 档案馆获得summerofgoto.com [archived]。 (传出的 GitHub 链接也已失效,但脚本也已存档:parseScripts.jsgoto.min.jsgoto.js。)

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

    【讨论】:

    • 在声明标签之前执行 goto 只有一个限制,但这对我有帮助,谢谢!
    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多