我如何将Ruby转换为Lua



有什么方法可以自动将红宝石代码转换为lua?我的问题是:

  1. 为此目的存在哪些工具?
  2. 他们的局限性是什么?

当我执行(转换为LUA程序)时,一个主要目标是能够绕过Ruby解释器。我不介意在转换为LUA期间需要调用Ruby解释器,但是当我运行新生成的LUA代码时,我不想依靠Ruby解释器。


更新:

我对这个主题做了很多研究,我个人没有找到解决方案(这就是为什么我在stackoverflow上问问题的原因)。

以防任何人好奇,我深入研究:

  • Ruby-lua ,尽管这一切都允许您从Ruby调用Lua
  • rlua ,这使您可以从Lua和Vise Vise运行Ruby Code,但它并未将Ruby转换为LUA,并且仍会在程序运行中调用Ruby Driventer。

很抱歉,如果这不是您想听到的答案,但是没有实用的方法,pal。我不会说Ruby比Lua更丰富,因为我还没有足够的研究来这样说,而是从我所知道的,我所看到的,

  1. 没有任何人会打扰将Ruby编译器写入LUA和类似语言。
  2. 不可能编写此类编译器比手动重写程序更短的时间。
  3. 唯一的语言红宝石社区关心将红宝石汇编成ruby bytecode。

一个人可能会继续介绍什么可能性,而不是将高级语言彼此汇编在一起,而是您的最重要的是:尽早放弃。停止搜索并开始手动重写您的Prog。

注意:我同意这里的其他所有人,您真的应该从头开始重写程序。这个答案只是一个想法,我希望有人能真正研究。

已经有几个 ruby-to-x 转换器可以引导。好人已经有lexer&解析器,因此您只需要与后端合作。如果您选择类似于LUA的语言,那么您可以更简化内容。

例如,有一些Ruby-to-JavaScript实现,例如Rubyjs。抛开元方法, self句法糖,库差异和一些语义差异,在这里和那里的一些语义差异,lua可以看作是带有更详细语法的JavaScript的子集。

考虑到这一点,您可以通过在此处和那里更改一些{ } S来修改大多数后端生成器:

// some random js
while(x < 56 && y == 40) {
  print('Hello World!');
}

&nbsp;

-- What you could make it generate:
while x < 56 and y == 40 do
  print 'Hello World!'
end

也许有几次它依赖于JavaScript特定功能,但即使那样,大多数都可以模仿。

// Javascript has a === operator that enforces type equality
'5' === 5 // FALSE!

&nbsp;

-- Lua lacks this, but it's easy to imitate
(type('5') == type(5)) and ('5' == 5)

不,老实说,这不是一个容易的项目,但我认为这绝对值得投入时间。我希望这会有所帮助!:)

通用 - 转移器是Swi-Prog的库,可以将一小部分Ruby转换为LUA和其他几种语言。

这是其在Prolog中使用的示例,Ruby源代码作为输入:

:- use_module(library(transpiler)).
:- set_prolog_flag(double_quotes,chars).
:- initialization(main).
main :- 
    translate("def add(a,b) return a + b end def squared(a) return a*a end def add_exclamation_point(parameter) return parameter + "!" end",'ruby','lua',X),
    atom_chars(Y,X),
    writeln(Y).

...这是生成的LUA源代码:

function add(a,b) 
        return a..b
end 
function squared(a) 
        return a*a
end 
function add_exclamation_point(parameter) 
        return parameter.."!"
end

最新更新