سؤال

ما هي بعض أدوات جيدة للحصول على بداية سريعة من أجل تحليل وتحليل C/C++ الكود ؟

على وجه الخصوص, أنا أبحث عن أدوات مفتوحة المصدر التي تحمل preprocessor C/C++ و لغة.ويفضل أن تكون هذه الأدوات استخدام ليكس/yacc (أو فليكس/بيسون) على النحو وألا تكون معقدة جدا.ينبغي التعامل مع أحدث ANSI C/C++ التعاريف.

هذا ما وجدته حتى الآن, ولكن لم نبحث في التفاصيل (الأفكار؟):

  • CScope - المدرسة القديمة ج محلل.لا يبدو أن تفعل الكامل تحليل, على الرغم من.وصفه سبحانه 'البقرى' على إيجاد وظائف C.
  • دول مجلس التعاون الخليجي - الجميع المفضلة مفتوحة المصدر البرمجي.معقدة جدا, ولكن يبدو أن تفعل كل شيء.هناك مشاريع لإنشاء دول مجلس التعاون الخليجي امتداد يسمى جوهرة, ولكن لم يتم تحديثه منذ الخليجي 4.1 (2006).
  • PUMA - نقية مناور.(من الصفحة:"القصد من هذا المشروع هو توفر مكتبة دروس التحليل و التلاعب C/C++ المصادر.هذا الغرض بوما توفر فصول المسح الضوئي, تحليل و بالطبع التلاعب C/C++ مصادر.").هذا يبدو واعدا ، ولكن لم يتم تحديثه منذ عام 2001.على ما يبدو من طراز بوما قد أدرجت في AspectC++, لكن حتى هذا المشروع لم يتم تحديثه منذ عام 2006.
  • مختلف C/C++ الخام قواعد النحو.يمكنك الحصول على c-c++-grammars-1.2.tar.gz, ولكن هذا كان غير المشرف عليها منذ عام 1997.القليل من البحث جوجل تسحب ما يصل الأساسية الأخرى ليكس/yacc القواعد التي يمكن أن تكون بمثابة مكان الانطلاق.
  • أي آخرين ؟

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

وذلك بفضل!-مات

(وأضاف 2/9):مجرد توضيح:أريد استخراج الدلالي المعلومات من المعالج بالإضافة إلى C/C++ القانون نفسه.أنا لا أريد "#تعريف فو 42" أن تختفي في عدد "42", ولكن لا تزال تعلق على اسم "فو".هذا للأسف يستبعد العديد من الحلول التي تعمل على المعالج الأول والوحيد تسليم C/C++ تحليل شجرة)

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

المحلول

تحليل C++ من الصعب للغاية لأن النحوي هو غير مقرر.اقتباس يوسي Kreinin:

والرائع النحوية المعقدة

"بشكل رائع" ينبغي أن تفسر حرفيا ، لأن شعبية في جميع اللغات لديك الخالية من السياق (أو "تقريبا" الخالية من السياق) قواعد النحو ، في حين C++ وقد غير مقرر قواعد اللغة.إذا كنت تحب المجمعين و موزعي, ربما كنت أعرف ما يعني هذا.إذا كنت لا في هذا النوع من الشيء ، هناك مثال بسيط تظهر المشكلة مع تحليل C++:هو AA BB(CC); كائن تعريف أو وظيفة الإعلان ؟ اتضح أن الجواب يعتمد بشكل كبير على القانون قبل بيان - "السياق".وهذا يدل (على مستوى بديهية) أن C++ النحوي جدا حساسة للسياق.

نصائح أخرى

يمكنك أن تبحث في رنة يستخدم llvm لتحليل.

الدعم C++ تماما الآن الرابط

على ANTLR محلل مولد لديه قواعد اللغة C/C++ وكذلك المعالج.لم أكن استخدامها حتى لا أستطيع أن أقول كيف استكمال تحليل C++ سيكون.ANTLR نفسها أداة مفيدة بالنسبة لي في عدة مناسبات من أجل تحليل أبسط من ذلك بكثير اللغات.

اعتمادا على المشكلة GCCXML قد يكون الجواب.في الأساس كان يوزع المصدر باستخدام دول مجلس التعاون الخليجي ومن ثم يتيح لك بسهولة الهضم XML من تحليل شجرة.مع GCCXML كنت فعلت مرة واحدة وإلى الأبد.

pycparser هو استكمال محلل C (C99) مكتوبة في بيثون.وقد شكلي تماما AST الخلفية, حتى انها تستخدم كأساس لأي نوع من معالجة اللغة قد تحتاج إليها.

لا يدعم C++, على الرغم من.منح انه كثيرا أصعب من C.


تحديث (2012):في هذا الوقت الجواب ، دون أي شك, سيكون رنة إنه وحدات تدعم الكاملة C++ (مع العديد من C++-11 الميزات) قد ودية نسبيا رمز قاعدة.كما أن لديها C API من أجل ربط إلى اللغات عالية المستوى (أي بايثون).

إلقاء نظرة على كيف doxygen يعمل كامل شفرة المصدر متاحة وانها فليكس القائم.

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

لديهم قواعد النحو C و C#, لا C++.

تحليل C++ معقدة جدا التحدي.

هناك دفعة/روح إطار بضع سنوات مضت لم اللعب مع فكرة تنفيذ C++ محلل, لكنه بعيدة عن الاكتمال.

بشكل كامل و بشكل صحيح تحليل ISO C++ هو أبعد من تافهة و كانت هناك في الواقع العديد من الجهود ذات الصلة.ولكنها بطبيعتها معقدة الوظيفة التي لا يتحقق بسهولة دون إعادة كتابة مترجم كامل الواجهة فهم كل من C++ و المعالج.قبل المعالج تنفيذ يسمى "موجة" من روح الناس.

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

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

شخصيا, وأود أن تحقق إلسا القائم على لحم الخنزير/oink الجناح الذي يستخدم في موزيلا, وبصرف النظر عن ذلك ، FSF الآن العمل المعتمدة على دول مجلس التعاون الخليجي الإضافات استخدام مكتبة وقت تشغيل الترخيص ، وبالتالي أود أن نفترض أن الأمور ستتغير بسرعة بمجرد أن الناس يمكن بسهولة الاستفادة من دول مجلس التعاون الخليجي على أساس C++ محلل لهذه الأغراض باستخدام ثنائي الإضافات.

لذا باختصار:إذا كنت دولار:EDG, إذا كنت بحاجة إلى شيء الحرة/مفتوحة المصدر الآن:آخر/oink هي واعدة إلى حد ما, إذا كان لديك بعض الوقت ، قد ترغب في استخدام دول مجلس التعاون الخليجي للمشروع الخاص بك.

خيار آخر فقط على التعليمات البرمجية C هو cscout.

اللغة C++ هو نوع من المعروف شعر.هناك الخيط جيدا في امدا عن ذلك ، ولكن جوهر هو أن C++ النحوي يمكن أن تتطلب تعسفا بكثير lookahead.

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

في الواقع, PUMA و AspectC++ لا تزال على حد سواء بنشاط صيانتها وتحديثها.كنت أبحث في استخدام AspectC++ و أتساءل عن عدم وجود تحديثات نفسي.أنا راسلت صاحب البلاغ من قال أن كلا AspectC++ و PUMA لا تزال قيد التطوير.يمكنك الحصول على شفرة المصدر من خلال SVN https://svn.aspectc.org/repos/ أو يمكنك الحصول على الثنائية العادية يبني في http://akut.aspectc.org.كما هو الحال مع الكثير من ممتاز c++ المشاريع في هذه الأيام ، الكاتب لا يملك الوقت لمواكبة صفحة ويب الصيانة.من المنطقي إذا كنت قد حصلت على وظيفة بدوام كامل و الحياة.

إلسا يدق كل شيء آخر وأنا أعلم الأيدي C++ تحليل, على الرغم من أنها ليست متوافقة 100٪.أنا مروحة.هناك وحدة الذي يطبع C++, بحيث قد يكون نقطة انطلاق جيدة لعبتك المشروع.

ماذا عن شيء أسهل على الفهم مثل صغيرة-C أو ج صغيرة

ترى لدينا C++ الأمامية كامل المواصفات C++ محلل:يبني ASTs رمز الجداول هل اسم و نوع القرار.حتى يمكنك تحليل و الإبقاء على المعالج التوجيهات.C++ الأمامية بنيت على أعلى من DMS برامج إعادة الهيكلة أدوات, مما يتيح لك استخدام هذه المعلومات لإجراء تعسفي التغييرات التعليمات البرمجية المصدر باستخدام مصدر إلى مصدر التحولات.

DMS هو محرك مثالي تنفيذ هذه الترجمة.

وقد قلت ذلك, أنا لا أرى فائدة في أن يتصور المهمة ؛ لا نرى قيمة كبيرة في محاولة استبدال C++ و ستجد مبنى كاملة مترجم كمية هائلة من العمل ، خصوصا إذا كان الهدف هو "لعبة" اللغة.و يرجح أن هناك نقطة صغيرة في تحليل C++ باستخدام القوي محلل, إذا كان هدفه الوحيد هو إنتاج وهو متماثل نسخة من C++ يسهل تحليل (الانتظار سلمنا جدلا قوي C++ بالفعل!).

تحرير مايو 2012:DMS C++ الأمامية يعالج الآن GCC3/GCC4/C++11,Microsoft VisualC 2005/2010.بقوة.

تحرير فبراير 2015:الآن يعالج C++14 في دول مجلس التعاون الخليجي و MS اللهجات.

تحرير أغسطس 2015:الآن يوزع ويلتقط كل رمز و توجيهات المعالج في موحد شجرة.

في حين يعود حاولت الكتابة أداة من شأنها أن تولد تلقائيا وحدة اختبارات ج الملفات.

بالنسبة preprosessing أضع الملفات من خلال دول مجلس التعاون الخليجي.الإخراج هو قبيح ولكن يمكنك بسهولة تتبع فيها في الأصل رمز من معالجة الملف.ولكن لتلبية الاحتياجات الخاصة بك قد تحتاج إلى شيء آخر.

اعتدت متر كقاعدة ل ج محلل.وهو مفتوح المصدر يستخدم ليكس و yacc.وهذا جعل من السهل الحصول على وتشغيلها في وقت قصير دون فهم كامل ليكس & yacc.

كما كتب C التطبيق منذ ليكس & yacc الحل لا يمكن أن تساعد لي أثر وظائف عبر وظائف تحليل هيكل وظيفة كاملة في مرور واحد.أصبح unmaintainable في وقت قصير و تم التخلي عنه.

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

ويساعد هذا الأمل ، أطيب التحيات ، توم.

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