متى تكون قواعد قواعد غامضة أو قاعدة إنتاج موافق؟ (بيسون التحول / تقليل التحذيرات)

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

سؤال

هناك بالتأكيد الكثير من المستندات و HowTOS على حل الأخطاء التحول / تقليل الأخطاء. تشير مستندات BISON إلى الحل الصحيح عادة ما يتوقعان فقط منهم والتعامل معها.

عندما يكون لديك أشياء مثل هذا:

S: S 'b' S | 't'

يمكنك بسهولة حلها مثل هذا:

S: S 'b' T | T
T: 't'

سؤالي هو: هل من الأفضل ترك القواعد غامضة لمسة وتتوقع٪ من المشاكل التحول / تقليل المشاكل أو هل من الأفضل محاولة ضبط القواعد لتجنبها؟ أظن أنه هناك توازن وتستند إلى احتياجات المؤلف، لكنني لا أعرف حقا.

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

المحلول

كما قرأته، سؤالك هو "متى تكون قواعد قواعدية غامضة أو قاعدة إنتاج موافق؟"

أولا، فكر في اللغة التي تصفها. ما سيكون التضمين في السماح بقاعدة إنتاج غامضة في اللغة.

يصف مثالك لغة قد تتضمن تعبيرا مثل: t b t b t b t

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

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

نصائح أخرى

يمكنك توجيه دقة النزاعات مع الأسبقية للمشغل. يعلن 'b' كمشغل من اليسار أو اليمين وتم تغطيتك في هذه الحالة على الأقل.

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

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

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

إنه تحليل التكلفة / الفوائد بمجرد أن تتورط الأمور حقا، ولكن IMHO، إصلاحها يجب أن تعتبر أولا، ثم اكتشف في الواقع ما سيكون العمل (وإذا كان هذا العمل يكسر شيئا آخر، أو يجعل شيئا آخر أصعب)، وتذهب من هناك. لا تمر بهم أبدا كمادة شائعة.

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

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