هل استخدم أي شخص "تفضيلات الاختيار" التي توفرها MKS YACC؟

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

  •  20-08-2019
  •  | 
  •  

سؤال

منذ أن لم أحصل على أي إجابة على الإطلاق على سؤالي هل هناك بديل لـ MKS YACC يدعم بناء جملة تفضيلات الاختيار أو شيء مشابه جدًا؟, ، سأطرح السؤال الأساسي:

  • هل استخدم أي شخص "تفضيلات الاختيار" التي توفرها MKS YACC؟

إذا كان لديك ، ماذا استخدمته؟ أيضا ، هل من المنطقي استخدامه في أي شيء آخر غير الموقف الأخير في القاعدة؟

لا بد لي من الاعتناء بقواعد قواعد مثل:

    TOKEN1 LPAREN non_terminal1 [^EQUAL] TOKEN2 non_terminal2 RPAREN

ما لم أكن أسيء فهم شيء ما ، فإن تفضيل الاختيار المدمج لا يوفر أي قيمة على الإطلاق في هذا السياق.

خلفية

يدعم MKS YACC تدوينًا يتصل به موقع الويب الخاص بهم "بناء جملة تفضيلات". لم يتم توضيح ذلك ، ولكنه يتكون من رمز أو قائمة من الرموز الرموز في أقواس مربعة مع بقعة (والتي قد تكون اختيارية) ، وتشير إلى أن الرمز المميز الخاص يجب ألا يتبع هذا البناء ، لكن الرمز المميز لم يتم احتسابه كجزء من هذه القاعدة:

non_terminal1:  TOKEN1 non_terminal2 TOKEN2 [^TOKEN3]

لذلك ، تقول هذه القواعد أن أ TOKEN1 متبوعة ب non_terminal2 و TOKEN2 هو non_terminal1, ، ما لم يكن الرمز التالي هو TOKEN3 في هذه الحالة ، تنطبق بعض القواعد الأخرى.

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

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

المحلول

جوناثان. في الساعة 1:30 صباحًا ، لست مستعدًا لمحاولة القيام بذلك بنفسي ، ولكن مهما كانت هذه القواعد ، يمكن أن تكون اختصارًا فقط للقواعد التي يمكن كتابتها في شيء مثل BNF العادي. بالنظر إلى هذا ، يبدو أن ما يفعله "تفضيل الاختيار" هو السماح لك بالتعبير عن ما يمكن أن يكون العديد من المنتجات ذات قاعدة قواعد واحدة.

فعلت القليل من الحفر ووجدت هذه, ، وهو ما يؤكد افتراضي: ما يفعله تفضيل الاختيار هو أن يتيح لك إدراج بشكل صريح ، بحيث يمكن وضع القواعد التي يمكن أن تكون في خلاف ذلك.

ما أقترحه هو التفكير في شكل إحدى هذه القواعد إذا تم إعادة كتابتها في YACC أو BNF المستقيم. أظن أنه سيؤدي إلى شيء مثل

TOKEN1 LPAREN non_terminal1 MULT TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 DIVIDE TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 ADD TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 SUBTRACT TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 EXP TOKEN2 non_terminal2 RPAREN
TOKEN1 LPAREN non_terminal1 MOD TOKEN2 non_terminal2 RPAREN
...

بحيث يكون التأثير الكلي هو أخذ قاعدة واحدة لكل مشغل إلا على قدم المساواة [^ التدوين شائع في لغات Bell Labs المختلفة لشيء مثل تكملة مجموعة.

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