Pregunta

¿hay alguna manera fácil de portar código Lua a C #?

El mayor problema probablemente sería a las tablas de puertos de forma ordenada en algunos diccionarios.

Y para evitar cualquier malentendido:. no, yo no puedo usar incrustado en mi programa Lua

¿Fue útil?

Solución

Código diseñado de tal un lenguaje altamente dinámico como Lua necesitaría refactorización sustancial a tiene sentido en un lenguaje estático como C # - los dos sirven fundamentalmente diferentes propósitos. Usted tendría que volver a escribir dicho código de nuevo desde cero, de manera realista, a menos que utiliza sólo las características más básicas de cualquier idioma, como operaciones básicas numérica / string.

Otros consejos

No hay manera fácil de hacerlo.

¿Qué quieres lograr? Convertir los archivos lua a código C #, en la que desea trabajar con ellos ampliamente, o lo que desea es un código que hace cosas similares que el código original.

En el primer tipo de conversión de la respuesta es que es muy difícil, pero no imposible. Usted tiene que analizar el código y volver a crear la misma funcionalidad (dinámico) en C #. Marcos, como LinFu.Reflection pueden ayudar aquí, porque van a añadir un poco de funcionalidad dinámica de CLR.

En el segundo tipo, mi idea es convertir el código de bytes lua a C # en lugar del código original. Esto no debería ser demasiado difícil, principalmente porque lua no tiene mucho códigos de operación (en torno al 30 si recuerdo correctamente). A partir de estos códigos de operación de los más difíciles de convertir son los operadores lógicos y de salto (porque no tiene Goto en C #), pero si mantiene los operadores de flujo intacta (y convertirlos a C # - que es más o menos realizable), y sólo compilar el código entre, y convertir el código de bytes resultado a C # debe hacer el trabajo. Por supuesto esta manera si no se pierden una gran cantidad de la legibilidad del código original, y el mantenimiento será mucho más difícil.

También puede tratar de encontrar una solución entre estos dos casos extremos que he escrito aquí. Algunas construcciones se pueden trasladar fácilmente (principalmente los bucles, y operadores aritméticos simples), pero caen de nuevo a la representación de código de operación para el manejo de la tabla.

Universal-transpiler puede traducir un pequeño subconjunto de Lua en varios otros idiomas, incluyendo C #. Este es un ejemplo, escrito para 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).

Este es el código C # fuente que genera:

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+"!";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top