Легко портирование кода Lua на C # - PullRequest
1 голос
/ 02 февраля 2010

Есть ли простой способ перенести код Lua в C #?

Самой большой проблемой, вероятно, было бы аккуратное портирование таблиц в некоторых словарях.

И чтобы избежать недоразумений: нет, я не могу использовать встроенный Lua в моей программе .

Ответы [ 4 ]

2 голосов
/ 12 мая 2010

Код, разработанный на таком высокодинамичном языке, как Lua, потребует существенного рефакторинга, чтобы иметь смысл в статическом языке, таком как C #, - эти два служат принципиально различным целям. Вам бы пришлось реально переписать такой код с нуля, если бы он не использовал только самые базовые функции любого языка, такие как базовые числовые / строковые операции.

1 голос
/ 12 мая 2010

Нет простого способа сделать это.

0 голосов
/ 17 сентября 2016

Универсальный транспортер может перевести небольшое подмножество Lua на несколько других языков, включая C #. Вот пример, написанный для SWI-Prolog:

:- use_module(library(transpiler)).
:- set_prolog_flag(double_quotes,chars).
:- initialization(main).

main :- 
    translate("function add(a,b) return a + b end function squared(a) return a*a end function add_exclamation_point(parameter) return parameter .. \"!\" end",'lua','c#',X),
    atom_chars(Y,X),
    writeln(Y).

Это исходный код C #, который он генерирует:

public static int add(int a,int b){
        return a+b;
}
public static int squared(int a){
        return a*a;
}
public static string add_exclamation_point(string parameter){
        return parameter+"!";
}
0 голосов
/ 12 мая 2010

Чего вы хотите достичь? Преобразуйте файлы lua в код C #, где вы хотите интенсивно работать с ними, или вам просто нужен какой-то код, который выполняет те же функции, что и исходный код.

Для первого типа конверсии ответ таков: это довольно сложно, но не невозможно. Вы должны проанализировать код и воссоздать ту же (динамическую) функциональность в C #. В этом могут помочь такие фреймворки, как LinFu.Reflection, поскольку они добавят динамическую функциональность в CLR.

Для второго типа моя идея состоит в том, чтобы преобразовать байт-код lua в C # вместо исходного кода. Это не должно быть слишком сложно, в основном потому, что у lua мало опкодов (около 30, если я правильно помню). Из этих кодов операций сложнее всего преобразовать операторы логики и перехода (потому что у вас нет goto в C #), но если вы оставите операторы потока нетронутыми (и конвертируете их в C # - это более или менее выполнимо), и только скомпилируйте код между ними и конвертируйте полученный байт-код в C #. Конечно, таким образом вы многое потеряете от читабельности исходного кода, и поддерживать его будет намного сложнее.

Вы также можете попытаться найти решение между этими двумя крайними случаями, которые я написал здесь. Некоторые конструкции могут быть легко перенесены (в основном, циклы и простые арифметические операторы), но для обработки таблиц прибегают к представлению кода операции.

...