أين يمكنني العثور على قواعد BNF أو YACC القياسية للغة C++؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

من فضلك، يمكن لأي شخص أن يوجه لي رابطًا نحويًا قياسيًا، يتم وصفه بشكل أفضل بلغة yacc.

آمل ألا أقوم بإعادة اختراع العجلة، الرجاء مساعدتي في هذه الحالة.

مع أطيب التحيات ، كيفن

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

المحلول

C ++ التعليمات لايت :

38.11 هل هناك قواعد اللغة C ++-ياك قادرة؟

<اقتباس فقرة>   

والنحوي ياك الأساسي سترغب   هو من إد Willink. يعتقد إد له   قواعد متوافق تماما مع لل   ISO / ANSI C ++ القياسية ، ومع ذلك كان   لا تضمن ما يلي: "قواعد اللغة لديها   لا "، كما يقول،" استخدمت في الغضب ".   يمكنك الحصول على قواعد اللغة دون   روتين العمل أو قواعد اللغة   مع إجراءات العمل وهمية . أنت   يمكن أيضا الحصول على المقابلة   lexer . بالنسبة لأولئك الذين   مهتم في الكيفية التي يحقق   محلل خالية من السياق (عن طريق دفع كل   الغموض بالإضافة إلى عدد قليل من   الإصلاح الذي ينبغي القيام به في وقت لاحق بعد إعراب   غير كاملة)، قد ترغب في قراءة   الفصل 4 من اطروحته .

     

وهناك أيضا قواعد ياك قديمة جدا   لا يدعم القوالب،   الاستثناءات، ولا النطاقات. بالإضافة إلى أنه   ينحرف عن اللغة الأساسية في   بعض طرق خفية. يمكنك الحصول على ذلك   قواعد هنا أو <وأ href = "http://srawgw.sra.co.jp /.a/pub/cmd/c++grammar2.0.tar.gz "يختلط =" noreferrer "> هنا .

نصائح أخرى

لقد عثرت مؤخرًا على بعض الملفات النحوية لـ C++ (C++ 1998: آيزو/آي إي سي 14882:1998 و سي++ 2008: ISO/IEC SC22/WG21 N2723=08-0233) في ال موقع القواعد النحوية.النحو ممثلة في Enahnced BNF، DMS BNF، BGF، SDF وRascal الرموز.من المؤسف أنه لا يبدو أن القواعد النحوية لـ C++ قد تم تحديثها (لا يوجد C++ 2003 أو C++ 11).

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

لجعل الأمور أسوأ، C ++ 1X سوف complexify قواعد اللغة بشكل ملحوظ. للحصول على قدر من تحليل مثالي من C ++، سوف تحتاج إلى محلل لتنفيذ ما يكفي من مستوى إلى القيام قرار الزائد بشكل صحيح، بما في ذلك خصم حجة القالب، والتي بدورها سوف تتطلب المفاهيم آلية، lambdas، وفي الواقع كلها تقريبا من لغة، باستثناء اسم على مرحلتين البحث واستثناء المواصفات التي، إذا لم تخني، لا تحتاج إلى التنفيذ الفعلي لتحليل برنامج بنجاح.

في الواقع، كنت في منتصف الطريق إلى مترجم إذا كنت يمكن تحليل C ++.

لنهج آخر، هل يمكن النظر أصبع الدعم على مترجم القائمة.

دول مجلس التعاون الخليجي XML سوف "تجميع" C ++ إلى ملفات XML مع الكثير من معلومات مفيدة؛ قد يكون كافيا لأغراضك.

ومما يؤسف له، دول مجلس التعاون الخليجي XML ليست سوى 1/4-المحافظة، والحصول على عمل يمكن أن يكون ... مثيرة للاهتمام. حظا سعيدا، إذا كنت السير في هذا الطريق.

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

وبعد إعادة قراءة تعليقك ...

هذه الأداة تناسب احتياجاتك بالضبط.

ويمكن الحصول على لدينا DMS برنامج إعادة هندسة الأدوات مع قوة، ظهرت كاملة C ++ محلل. نرى http://www.semanticdesigns.com/Products/FrontEnds/CppFrontEnd.html هذا يبني ASTS والجداول رمز، ويمكن الاستدلال على نوع من أي تعبير. DMS تمكن واحد لإجراء تحليلات والتحولات التعسفية على رمز C ++.

وتحول واحد "بسيط" هو instrumenting رمز لجمع اختبار التغطية البيانات؛ نحن نقدم هذه كأداة المهود. ترى هذه الورقة أن نفهم كيف DMS يفعل ذلك: http://www.semanticdesigns.com/Company/Publications/TestCoverage.pdf

وتحرير سبتمبر 2013 (وهذا الجواب كان الحصول قديمة بعض الشيء): C ++ DMS ل تحليل تدفق محلل / تحليل الاسم / تحكم يعالج بالكامل C ++ 11، في ISO-، GNU- ومايكروسوفت المتغيرات. وسوف تحليل أيضا (والاحتفاظ) شفرة المصدر التي تحتوي على معظم الشرطية قبل المعالج. أنه يحتوي على قواعد واضحة يقود عملية التوزيع، خلافا لدول مجلس التعاون الخليجي أو رنة.

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