2010-02-02 82 views
1

有沒有簡單的方法將Lua代碼移植到C#?輕鬆地將Lua代碼移植到C#

最大的問題可能是在一些字典中整潔地移植表格。

並防止任何誤解:不,我不能在我的程序中使用嵌入式Lua。

+0

你是什麼意思與 「嵌入的Lua」?你會把Lua2IL也算作「嵌入式Lua」嗎?是不使用或引用本地實現AFAIK,但只生成簡單的IL,以便它甚至可以在緊湊的框架和不同的平臺上工作。 – Lucero 2010-02-02 14:47:15

+0

我的意思是我不能使用任何形式的Lua。但感謝一個想法,我可能會在其他時候使用Lua2IL。 – mnn 2010-02-02 17:21:00

回答

2

以像Lua這樣的高度動態語言設計的代碼需要大量的重構,以便像C#這樣的靜態語言有意義 - 兩者服務於根本不同的目的。除非僅使用任何語言的最基本功能,例如基本的數字/字符串操作,否則您將不得不重新從頭開始重新編寫此類代碼。

1

有沒有簡單的方法來做到這一點。

0

你想實現什麼?將lua文件轉換爲C#代碼,您可以在其中廣泛使用lua文件,或者您只需要一些與原始代碼類似的代碼。

對於第一種類型的轉換,答案是它非常困難,但並非不可能。您必須解析代碼並在C#中重新創建相同的(動態)功能。像LinFu.Reflection這樣的框架可以在這裏幫助,因爲它們會爲CLR增加一些動態功能。

對於第二種類型,我的想法是將lua字節碼轉換爲C#而不是原始代碼。這不應該太難,主要是因爲lua沒有太多的操作碼(如果我記得正確的話,大約30個)。從這些操作碼中最難轉換的是邏輯和跳轉操作符(因爲你沒有在C#中轉換),但是如果你保持流操作符完整(並將它們轉換爲C# - 或多或少都可以實現),並且只編譯之間的代碼,並將結果字節碼轉換爲C#應該做的工作。當然,這樣你會從原始代碼的可讀性中損失很多,而維護它將會更加困難。

你也可以嘗試找到我在這裏寫的這兩個邊緣案例之間的解決方案。一些構造可以很容易地移植(主要是循環和簡單的算術運算符),但是可以回到操作碼錶示來處理表格。

+0

C#已經轉到。 http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx – 2010-05-12 18:01:20

0

Universal-transpiler可以將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+"!"; 
}