質問

C#にポートLuaのコードに簡単な方法はありますか?

最大の問題は、おそらくいくつかの辞書できちんとポートテーブルになります。

。のいいえ、私はの私のプログラムに組み込まれたLuaのを使用することはできません。

:任意の誤解を防ぐために、

そして

役に立ちましたか?

解決

2は根本的に異なる目的を果たす -

コードは、C#のような静的言語で意味をなすためにかなりのリファクタリングが必要になりますLuaのようなA非常に動的な言語で設計されています。それは基本的な数値/文字列OPSのような任意の言語の唯一の最も基本的な機能を、使用しない限り、あなたは、現実的に、最初からもう一度再書き込み、このようなコードにしています。

他のヒント

これを行うには簡単な方法はありません。

あなたは何を達成したいですか? LUAファイルは、広範囲にわたって彼らと一緒に仕事をしたいC#コードに変換し、またはあなただけのオリジナルのコードよりも同様のことを行い、いくつかのコードを望んでます。

は、変換の第一のタイプのための答えは、それは非常に難しいが、不可能ではないということです。あなたは、コードを解析し、C#で同じ(ダイナミック)機能を再作成する必要があります。彼らはCLRにいくつかの動的な機能を追加しますので、LinFu.Reflectionのようなフレームワークは、ここに助けることができます。

は第二のタイプについて、私の考えは、C#の代わりに、元のコードにLuaのバイトコードを変換することです。これは、(私はそれを正しく覚えていれば約30)をLUAは多くのオペコードを持っていない主な理由は、あまりにも難しいことではありません。最も困難なこれらのオペコードへ変換する(あなたがC#でのgotoを持っていないので)ロジックとジャンプ演算子ですが、あなたはそのままフロー演算子を保つ(およびC#に変換 - 多かれ少なかれ達成可能である)場合にのみ、および間のコードをコンパイルして、仕事をする必要がありますC#への結果のバイトコードに変換します。もちろん、この方法は、あなたは、元のコードのreadibilityから多くを失うと、それははるかに困難になります維持します。

また、私がここに書いたこれら二つのエッジケースの間に解決策を見つけることを試みるかもしれません。いくつかの構築物は、容易に(主ループ、および単純な算術演算子)を移植するが、テーブルの処理のためのオペコード表現にフォールバックすることができる。

ユニバーサルtranspiler のC#など、いくつかの他の言語へのLUAの小さなサブセットを変換することができます。これは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