سؤال

هل هناك أي طريقة سهلة لبرنامج Port Lua Code إلى C#؟

من المحتمل أن تكون المشكلة الأكبر هي المنافذ بدقة في بعض القواميس.

ومنع أي سوء فهم: لا ، لا يمكنني استخدام LUA المضمنة في برنامجي.

هل كانت مفيدة؟

المحلول

الرمز المصمم بلغة ديناميكية للغاية مثل لوا ستحتاج إلى إعادة تنسيق جوهرية بحيث تكون منطقية بلغة ثابتة مثل C#- يخدم الاثنان أغراضًا مختلفة بشكل أساسي. يجب عليك إعادة كتابة هذا الرمز مرة أخرى من نقطة الصفر ، بشكل واقعي ، ما لم تستخدم فقط الميزات الأساسية لأي لغة ، مثل OPS العددية/السلسلة الأساسية.

نصائح أخرى

لا توجد طريقة سهلة للقيام بذلك.

ماذا تريد ان تحقق؟ قم بتحويل ملفات LUA إلى رمز C# ، حيث تريد العمل معها على نطاق واسع ، أو تريد فقط بعض التعليمات البرمجية التي تقوم بأشياء مماثلة من الكود الأصلي.

بالنسبة للنوع الأول من التحويل ، فإن الإجابة هي أنه من الصعب للغاية ، ولكن ليس مستحيلًا. يجب عليك تحليل الكود وإعادة إنشاء الوظيفة (الديناميكية) نفسها في C#. يمكن أن تساعد الأطر ، مثل linfu.reflection هنا ، لأنها ستضيف بعض الوظائف الديناميكية إلى CLR.

بالنسبة للنوع الثاني ، فإن فكرتي هي تحويل Lua Bytecode إلى C# بدلاً من الكود الأصلي. لا ينبغي أن يكون هذا صعبًا للغاية ، وذلك أساسًا لأن Lua ليس لديه الكثير من الرموز المفصلية (حوالي 30 إذا كنت أتذكرها بشكل صحيح). من بين هذه الرموز الإلكترونية ، يكون من الصعب تحويله من المنطق والقفز (لأنه ليس لديك GOTO في C#) ، ولكن إذا حافظت على مشغلي التدفق سليمة (وتحويلهم إلى C# - هذا أمر يمكن إنجازه إلى حد ما) ، وفقط قم بتجميع الرمز بين ، وتحويل النتيجة bytecode إلى C# يجب القيام بالمهمة. بالطبع بهذه الطريقة ، ستفقد الكثير من مسألة الكود الأصلي ، وسيكون الحفاظ عليها أكثر صعوبة.

قد تحاول أيضًا العثور على حل بين هاتين الحافة التي كتبتها هنا. يمكن نقل بعض الإنشاءات بسهولة (خاصة الحلقات ، ومشغلي الحساب البسيطة) ، ولكن العودة إلى تمثيل الرمز البسيط لمعالجة الجدول.

ترانسبيلر العالمي يمكن ترجمة مجموعة فرعية صغيرة من 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