1

有什么简单的方法可以将 Lua 代码移植到 C#?

最大的问题可能是在某些字典中整齐地移植表。

并且为了防止任何误解:不,我不能在我的程序中使用嵌入式 Lua

4

4 回答 4

2

用像 Lua 这样高度动态的语言设计的代码需要大量重构才能在像 C# 这样的静态语言中有意义——两者的用途根本不同。实际上,您必须从头开始重新编写此类代码,除非它仅使用任何语言的最基本功能,例如基本的数字/字符串操作。

于 2010-05-12T17:27:42.683 回答
1

没有简单的方法可以做到这一点。

于 2010-05-12T17:10:10.673 回答
1

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+"!";
}
于 2016-09-16T21:44:33.173 回答
0

你想达到什么目标?将 lua 文件转换为 C# 代码,您希望在其中广泛使用它们,或者您只想要一些与原始代码执行类似操作的代码。

对于第一种类型的转换,答案是相当困难,但并非不可能。您必须解析代码并在 C# 中重新创建相同的(动态)功能。像 LinFu.Reflection 这样的框架可以在这里提供帮助,因为它们会为 CLR 添加一些动态功能。

对于第二种类型,我的想法是将lua字节码转换为C#而不是原始代码。这应该不会太难,主要是因为 lua 没有太多操作码(如果我没记错的话,大约 30 个)。在这些操作码中,最难转换的是逻辑和跳转运算符(因为您在 C# 中没有 goto),但是如果您保持流运算符完整(并将它们转换为 C# - 这或多或少是可以完成的),并且只有编译之间的代码,并将结果字节码转换为 C# 应该可以完成这项工作。当然,这样你会从原始代码的可读性中损失很多,并且维护它会更加困难。

您也可以尝试在我在这里写的这两种极端情况之间找到解决方案。一些结构可以很容易地移植(主要是循环和简单的算术运算符),但会退回到操作码表示来处理表。

于 2010-05-12T17:52:56.527 回答