Frage

ist es eine einfache Möglichkeit zum Anschluss Lua Code in C #?

Das größte Problem wahrscheinlich in dem Hafen Tabellen ordentlich in einigen Worten sein würde.

Und jedes Missverständnis zu vermeiden:. nicht kann ich nicht Lua in meinem Programm eingebettet verwenden

War es hilfreich?

Lösung

entworfen-Code in einem solchen hochdynamischen Sprache wie Lua würde erhebliche Refactoring Sinn in einer statischen Sprache wie C # benötigen - die zwei grundsätzlich unterschiedlichen Zwecken dienen. Sie würden wieder neu zu schreiben einen solchen Code muss von Grund auf, realistisch, es sei denn, es nur die grundlegendsten Eigenschaften aller verwendeten Sprache, wie grundlegende numerische / string ops.

Andere Tipps

Es gibt keine einfache Möglichkeit, das zu tun.

Was wollen Sie erreichen? Konvertieren Sie die lua-Dateien in C # -Code, wo Sie arbeiten möchten mit ihnen ausführlich, oder Sie wollen einfach nur einige Code, der ähnliche Dinge tut, als den ursprünglichen Code.

Für die erste Art der Umwandlung ist die Antwort, dass es ziemlich schwierig ist, aber nicht unmöglich. Sie müssen den Code analysieren und neu erstellen die gleiche (dynamisch) Funktionalität in C #. Frameworks, wie LinFu.Reflection kann hier helfen, weil sie eine dynamische Funktionalität CLR hinzufügen.

Für die zweite Art, meine Idee ist, die lua-Bytecode C # anstelle des ursprünglichen Code zu konvertieren. Dies sollte nicht allzu schwierig sein, vor allem, weil lua nicht viel Opcodes hat (etwa 30, wenn ich es richtig erinnere). Aus diesem Opcodes am schwierigsten zu konvertieren sind die Logik und springen Operatoren (weil Sie haben goto nicht in C #), aber wenn man die Strömungs Betreiber intakt zu halten (und wandeln sie in C # -, die mehr oder weniger erfüllbar ist), und nur kompilieren Sie den Code zwischen und wandeln das Ergebnis Bytecode C # sollte die Arbeit machen. Natürlich diese Weise werden Sie eine Menge von der Lesbarkeit des ursprünglichen Codes verlieren und Aufrechterhaltung wird es viel schwieriger sein.

Sie können auch eine Lösung, die zwischen diesen beiden Rand Fällen versuchen, die ich geschrieben habe hier zu finden. Einige Konstrukte können leicht (vor allem die Schleifen und einfache arithmetische Operatoren) portiert werden, aber für Tabellenbearbeitung auf die Opcode Darstellung zurückgreifen.

Universal Transpiler kann eine kleine Teilmenge von Lua in mehrere Sprachen übersetzen, darunter C #. Dies ist ein Beispiel, geschrieben für 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).

Dies ist das C # Quellcode, dass es erzeugt:

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+"!";
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top