2012-11-07 12 views
8

Czy jest jakiś sposób, aby automatycznie przekonwertować kod Ruby na Lua? Moje pytanie brzmi:Jak mogę przekonwertować Ruby na Lua?

  1. Jakie narzędzia istnieją w tym celu?
  2. Jakie są ich ograniczenia?

Jednym z głównych celów jest możliwość ominięcia interpretera Ruby podczas wykonywania programu (konwertowanego na) Lua. Nie przeszkadza mi to, że interpreter Ruby musi zostać wywołany podczas procesu konwersji do Lua, ale nie chcę polegać na tłumaczu Ruby, kiedy uruchamiam nowo wygenerowany kod Lua.


UPDATE:

Robiłem dość bit badań na ten temat, a ja osobiścienie jestem znalezienie rozwiązania (dlatego pytam pytanie tutaj na StackOverflow).

W przypadku gdy ktoś jest ciekawy, szukałem głębiej:

  • Ruby-Lua, choć wszystko to robi to pozwala zadzwonić Lua od Ruby
  • RLua, to pozwala uruchom kod Ruby z Lua i vice versa, ale nie tłumaczy Ruby na Lua i nadal wywołuje interpreter Rubiego podczas uruchamiania programu.
+0

Ruby i Lua są prawdopodobnie zupełnie inne semantycznie, więc automatyczne tłumaczenie nie jest proste. Jak duży jest program, który chcesz przekonwertować? – lhf

+0

@lhf, większy niż chciałbym :( – nickb

+0

Dlaczego nie padły głosy? – nickb

Odpowiedz

7

Przepraszam, jeśli to nie jest odpowiedź chcesz usłyszeć, ale jest nie praktyczny sposób to zrobić, kolego. I nie zamierzam powiedzieć Ruby jest bogatszy niż Lua, bo nie badali wystarczy powiedzieć, że ten ostatni, ale z tego co wiem i co widzę,

  1. Nie ma sposobu, by ktoś przeszkadza pisanie kompilatora Rubiego do Lua i podobnych języków.
  2. Nie ma mowy, aby pisanie takiego kompilatora zajęło mniej czasu niż ręczne przepisanie programu.
  3. Jedynym językiem, dla którego społeczność Ruby zajmuje się kompilacją Rubiego, jest kod bajtowy Ruby.

Można się zastanawiać nad tym, jakie są możliwości, a nie tworzyć ze sobą języków wysokiego poziomu, ale najważniejszy jest dla ciebie: Poddaj się wcześnie. Zatrzymaj wyszukiwanie i rozpocznij ręczne przepisywanie progów.

+0

uzgodniono ......... – texasbruce

+0

zgadzam się. funkcje językowe są różne.dlatego konwersja miałaby luźne zalety i wprowadzała wady. jeśli chcesz czystej lua, napisz czystą luę. – glasz

+4

Ludzie w szałasie chcą mieć z tobą słowo :). – sunnyrjuneja

2

Uwaga: Zgadzam się z pozostałymi tutaj osobami, że naprawdę należy po prostu ponownie napisać swój program od podstaw. Ta odpowiedź jest po prostu pomysłem, mam nadzieję, że ktoś zajrzy naprawdę.

Istnieje już kilka Ruby-to-X konwertery, które mogłyby można startowej. Te dobre mają już parsery o nazwie lexer &, więc musisz tylko pracować z backendem. Jeśli wybierzesz język podobny do Lua, możesz uprościć rzeczy jeszcze bardziej.Na przykład istnieją implementacje a few Ruby-to-Javascript, na przykład RubyJS. Odkładając na bok metamorod, self syntaktyczny cukier, różnice biblioteczne i kilka różnic znaczeniowych tu i tam, Lua może być postrzegana jako podzbiór Javascriptu z bardziej złożoną składnią.

Mając to na uwadze, można modyfikować najbardziej generatora backend zmieniając kilka {} s tu i tam:

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

 

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

Być może występować kilka razy kiedy opiera się na specyficznych cechach JavaScript, ale nawet wtedy większość z nich może być emulowana.

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

 

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

Nie, szczerze mówiąc, to nie byłoby to łatwe przedsięwzięcie, ale myślę, że to coś na pewno warto inwestować czas w. Mam nadzieję, że to pomoże! :)

+1

Wiem, że zawsze będzie na to rynek, z olejkami węża. Nie chcę przez to obrazić RubyJS. Przyznają się - powołując się na stronę "RubyJS": "Za pomocą RubyJS można przekształcić podzbiór Ruby w kod JavaScript". * Podzbiór * jest słowem kluczowym. Może osiągnąć znaczący sukces, ale w końcu będzie jak Wine na X: Wiele programów na nim uruchomionych, z wyjątkiem tego, którego naprawdę potrzebujesz. Nadal, +1 do ciebie za trud. –

0

Universal-transpiler to biblioteka dla SWI-Prolog, która może przekonwertować mały podzbiór Ruby na Lua i kilka innych języków.

To jest przykład jego wykorzystania w Prologu, z kodem źródłowym Ruby jako jej wejścia:

:- 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). 

... i to jest kod źródłowy Lua, że ​​generuje:

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