有任何简单的方法来端口Lua代码到C#?

最大的问题很可能是对端口表整齐地在一些字典。

和防止任何误解:不,我不能使用嵌入的Lua在我的程序

有帮助吗?

解决方案

代码设计中像这样的Lua一个高度动态的语言将需要大量的重构是有意义的,如C#中的静态语言 - 两个发球局根本不同的目的。你会从头不得不重新写这样的代码,现实的,除非它仅使用任何语言的最基本的功能,如基本的数字/字符串欢声笑语。

其他提示

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

你想要什么来实现呢?转换要与他们合作广泛的LUA文件到C#代码,或者你只是想一些代码,做类似的事情比原来的代码。

有关该第一类型转换的答案是,它是相当硬的,但并非不可能。你必须分析代码,并重新创建在C#中相同的(动态)功能。框架,如LinFu.Reflection可以帮助在这里,因为他们会增加一些动态功能CLR。

有关的第二类型的,我的思想是将字节码LUA转换为C#,而不是原来的代码。这应该不是太难,主要是因为Lua中没有太多的操作码(约30,如果我没有记错的话)。从这些操作码最难转换的逻辑和跳跃运营商(因为你没有转到在C#),但如果你保持流运营商的完整(并将其转换为C# - 这是或多或少accomplishable),只有编译的代码,并将转换结果输出字节码C#应该做的工作。当然这样的,你会从原来的代码的可读性失去了很多,并保持它会更难。

您也可以尝试找我在这里写这两种极端情况之间的解决方案。一些构建体可以方便地移植(主要的循环,和简单的算术运算),但回落到操作码表示为表的处理。

通用-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+"!";
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top