سؤال

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

بالنسبة للجزء الأكبر، تم توسيع القواعد بسلاسة.ولكن بين الحين والآخر سأحصل على تقليل - تقليل أو تغيير - تقليل ذلك

  • من الصعب القضاء عليها
  • في بعض الأحيان لا يكون الأمر منطقيًا (لعقلي الضعيف)

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

لذا، هل هناك أي أدوات يمكن أن تمتص قواعد yacc، مما يعزز التصفح والتجربة ويسمح بتصحيح التغييرات؟

إذا أضفت إنتاجًا، أود أن أرى أكثر من "الإنتاج الذري المستخدم في كل مكان" (فكر في المعرف) "يتعارض مع القاعدة foo" (نعم، هناك معلومات أكثر، s/r، r/r، أكثر من ذلك ، ولكن أعتقد أنك فهمت الانجراف).سيكون من الجيد أن أحصل على بعض التلميحات عن التفاعل الذي يتجاوز وضع قبعة التفكير الخاصة بي ومحاولة تخيل مجموعة الرموز وآلة الحالة.

تحديث:أعتقد أنني يجب أن أوضح.نحن نستخدم بيركلي Yacc.لقد قمت باختبار استخدام إصدار حديث من Bison.بالنسبة للإخراج، قمت بتجميع القواعد باستخدام --report=itemset.

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

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

المحلول

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

ومع ذلك، فمن الجدير بالذكر أن صراعات الدعم/الدعم غالبًا ما تكون حميدة - إلا إذا كنت متأكدًا تمامًا من أنها مشكلة، فمحاولة "إصلاحها" غالبًا لا تكون جديرة بالاهتمام.نفس الشيء ليس صحيحًا مع تعارضات r/r.بينما هؤلاء أحيانا حميدة، فهي نادرة نسبيا.

يحرر:عفوًا -- آسف، ينبغي أن يكون -v.لقد ذكرت y.output، لذا يبدو أنك تعرف بالفعل كيفية القيام بهذا الجزء.النقطة المهمة هي أنك لا تحاول النظر إلى ملفات y.output مباشرةً، ولكن قم بإجراء فرق بين الملف الذي خرج بشكل نظيف والذي لم يظهر للحصول على بعض التفاصيل حول التعارض الفعلي (دون التحديق في الرقم 10) جيليون سطر من "الأشياء" لا بأس بها.

نصائح أخرى

هذا أفضل ما حصلت عليه:http://tldp.org/HOWTO/Lex-YACC-HOWTO-7.html

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