回答
以像Lua這樣的高度動態語言設計的代碼需要大量的重構,以便像C#這樣的靜態語言有意義 - 兩者服務於根本不同的目的。除非僅使用任何語言的最基本功能,例如基本的數字/字符串操作,否則您將不得不重新從頭開始重新編寫此類代碼。
有沒有簡單的方法來做到這一點。
你想實現什麼?將lua文件轉換爲C#代碼,您可以在其中廣泛使用lua文件,或者您只需要一些與原始代碼類似的代碼。
對於第一種類型的轉換,答案是它非常困難,但並非不可能。您必須解析代碼並在C#中重新創建相同的(動態)功能。像LinFu.Reflection這樣的框架可以在這裏幫助,因爲它們會爲CLR增加一些動態功能。
對於第二種類型,我的想法是將lua字節碼轉換爲C#而不是原始代碼。這不應該太難,主要是因爲lua沒有太多的操作碼(如果我記得正確的話,大約30個)。從這些操作碼中最難轉換的是邏輯和跳轉操作符(因爲你沒有在C#中轉換),但是如果你保持流操作符完整(並將它們轉換爲C# - 或多或少都可以實現),並且只編譯之間的代碼,並將結果字節碼轉換爲C#應該做的工作。當然,這樣你會從原始代碼的可讀性中損失很多,而維護它將會更加困難。
你也可以嘗試找到我在這裏寫的這兩個邊緣案例之間的解決方案。一些構造可以很容易地移植(主要是循環和簡單的算術運算符),但是可以回到操作碼錶示來處理表格。
C#已經轉到。 http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx – 2010-05-12 18:01:20
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+"!";
}
- 1. 是否有任何工具可以輕鬆將.NET代碼移植到Silverlight?
- 2. 將POSIX C代碼移植到windows中
- 3. 將代碼從Matlab移植到C++
- 4. 是否將基於QML的應用輕鬆移植到Windows Phone?
- 5. 將PHP代碼移植到Delphi代碼
- 6. 可以將Flask(Python)移植到Lua嗎?
- 7. 移植的C++代碼到Java
- 8. 幫助移植的C++到PHP代碼
- 9. C#加密代碼移植到Java
- 10. 移植C++從UNIX到Windows代碼
- 11. 將Common Lisp代碼移植到Clojure
- 12. 將源代碼從git移植到TFVC
- 13. 將java6 swing代碼移植到java5
- 14. Sigaction並將Linux代碼移植到Windows
- 15. 將舊的cuda代碼移植到7.5
- 16. 將Java SE代碼移植到黑莓
- 17. 將代碼從Linux移植到Windows
- 18. 將AWT圖形代碼移植到Android
- 19. 將java代碼移植到contiki-os
- 20. 將代碼從Linux移植到MinGW
- 21. 將Java代碼移植到Android
- 22. 將g ++代碼移植到Clang ++問題
- 23. 將php代碼從mysql_移植到mysqli_
- 24. 將Borland C++移植到C#
- 25. 移植Java代碼到Python
- 26. 移植PyTorch代碼到GPU
- 27. 將c/C++代碼移植到VxWorks中的問題
- 28. 將文件預處理代碼從C移植到C#
- 29. 移植C#反射代碼到地鐵UI
- 30. 將C++ Builder移植到Qt
你是什麼意思與 「嵌入的Lua」?你會把Lua2IL也算作「嵌入式Lua」嗎?是不使用或引用本地實現AFAIK,但只生成簡單的IL,以便它甚至可以在緊湊的框架和不同的平臺上工作。 – Lucero 2010-02-02 14:47:15
我的意思是我不能使用任何形式的Lua。但感謝一個想法,我可能會在其他時候使用Lua2IL。 – mnn 2010-02-02 17:21:00