Question

est-il un moyen facile au port du code Lua à C #?

Le plus gros problème serait probablement aux tables de port d'une manière ordonnée dans certains dictionnaires.

Et pour éviter tout malentendu. non, je ne peux pas utiliser Lua intégré dans mon programme

Était-ce utile?

La solution

code conçu dans un langage très dynamique comme Lua aurait besoin refactoring important de donner un sens dans une langue statique comme C # - les deux servent à des fins fondamentalement différentes. Vous devrez réécrire ce code à nouveau à partir de zéro, de façon réaliste, à moins qu'il ne sert que les caractéristiques les plus élémentaires d'une langue, comme ops numérique / chaîne de base.

Autres conseils

Il n'y a pas moyen facile de le faire.

Qu'est-ce que vous voulez atteindre? Convertir les fichiers lua à code C #, où vous voulez travailler avec eux longuement, ou vous voulez simplement un code qui fait des choses semblables que le code d'origine.

Pour le premier type de conversion, la réponse est qu'il est assez difficile, mais pas impossible. Vous devez analyser le code et recréer la même (dynamique) fonctionnalité en C #. Cadres, comme LinFu.Reflection peuvent aider ici, car ils ajouteront des fonctionnalités dynamiques CLR.

Pour le second type, mon idée est de convertir le Lua bytecode à C # au lieu du code d'origine. Cela ne devrait pas être trop difficile, surtout parce que Lua n'a pas beaucoup opcodes (environ 30 si je me souviens bien). A partir de ces opcodes les plus difficiles à convertir sont les opérateurs logiques et de saut (parce que vous n'avez pas goto en C #), mais si vous respectiez les opérateurs de flux (et les convertir en C # - qui est plus ou moins accomplishable), et seulement compiler le code entre, et convertir le résultat bytecode à C # devrait faire le travail. Bien sûr, cette façon vous perdrez beaucoup de la readibility du code d'origine, et maintenant ce sera beaucoup plus difficile.

Vous pouvez également essayer de trouver une solution entre ces deux cas de pointe que j'ai écrit ici. Certaines constructions peuvent être facilement intégrées (principalement les boucles et simples opérateurs arithmétiques), mais retombent à la représentation opcode pour le traitement de la table.

Universal-transpiler peut traduire un petit sous-ensemble de Lua dans plusieurs autres langues, y compris C #. Ceci est un exemple, écrit pour 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).

Ceci est le C # code source qu'il génère:

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+"!";
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top