أي السبب لم أتمكن من إنشاء لغة دعم أقحم, postfix ، البادئة المهام وأكثر من ذلك ؟

StackOverflow https://stackoverflow.com/questions/427040

سؤال

كنت أفكر مليا في خلق لغة من شأنها أن تكون مناسبة بشكل جيد للغاية إلى إنشاء DSLs ، من خلال السماح تعريفات الوظائف التي أقحم, postfix, بادئة, أو حتى تتكون من عدة كلمات.على سبيل المثال ، يمكنك تحديد أقحم الضرب المشغل على النحو التالي (حيث ضرب(X,Y) يعرف بالفعل):

a * b => multiply(a,b)

أو postfix "تربيع" المشغل:

a squared => a * a

أو C أو جافا على غرار الثلاثي المشغل الذي ينطوي على اثنين من الكلمات الرئيسية تتخللها المتغيرات:

a ? b : c => if a==true then b else c

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

هل هناك سبب أنا لا أرى أن من شأنها أن تجعل هذا صعبا للغاية ، مستحيلا ، أو مجرد فكرة سيئة عادي?

تحرير: عددا من الناس قد أشار لي إلى اللغات التي قد فعل هذا أو شيء من هذا القبيل ، ولكن في الحقيقة أنا مهتم في مؤشرات كيف يمكن تنفيذ بلدي محلل أو مشاكل قد تواجهها إذا فعل ذلك.

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

المحلول

هذا ليس من الصعب جدا أن تفعل.سوف تحتاج إلى تعيين كل مشغل ثبات (أقحم, بادئة أو postfix) ، الأسبقية.جعل الأسبقية الحقيقي ؛ عليك أن أشكر لي في وقت لاحق.مشغلي العالي الأسبقية ربط أكثر إحكاما من مشغلي أقل الأولوية ؛ في المساواة في مستويات الأسبقية ، يمكنك أن تطلب توضيح مع الأقواس ، ولكن عليك ربما تفضل أن يسمح بعض مشغلي أن يكون النقابي حيث يمكنك كتابة

x + y + z

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

قضية أخرى سوف تحتاج إلى أن يكون حذرا عندما يكون لديك

prefix (e) postfix

حيث prefix و postfix لها نفس الأسبقية.هذه الحالة يتطلب أيضا الأقواس توضيح.

ورقتي Unparsing التعبيرات مع البادئة و Postfix المشغلين وقد مثال محلل في الظهر, و يمكنك تحميل الكود, لكنه مكتوب في مل ، حتى أعماله قد لا يكون واضحا الهواة.ولكن الأعمال كلها من ثبات على شرح بتفصيل كبير.

نصائح أخرى

ما أنت ذاهب الى القيام به حيال ترتيب العمليات؟

a * b squared

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

هاسكل ديه فقط ما كنت أبحث عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top