سؤال

ما هو مولد المعجم/المحلل الأفضل (الأسهل في الاستخدام والأسرع) لـ C أو C++؟أنا أستخدم flex وbison في الوقت الحالي، لكن البيسون يتعامل فقط مع القواعد النحوية LALR(1).اللغة التي أقوم بتحليلها لا تفعل ذلك حقًا تحتاج إلى نظرة أمامية غير محدودة، ولكن نظرة أمامية غير محدودة من شأنها أن تؤدي إلى التحليل كثيراً أسهل.هل يجب أن أحاول أنتلر؟كوكو/ص؟الخوند؟شيء آخر؟

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

المحلول

محدث 2015-01-05:

لي الجواب الأصلي يشير إلى سؤال محذوف الآن:

هناك مجموعة من الإجابات الجيدة على هذا السؤال موجودة بالفعل ما هو المولد المحلل اللغوي الذي توصي به؟

لذلك أخذت قائمة العناصر من الإجابة المحذوفة على archive.org بتصويت واحد على الأقل هنا:

لقد قمت بعمل العديد من أنظمة flex/bison بنفسي ولكني الآن سأستبدلهما بـ ليمون من sqlite نظرًا لأنها أداة واحدة وقابلة لإعادة الدخول وآمنة للخيوط بالإضافة إلى وجود نموذج قائم على التدفق/السحب.

نصائح أخرى

والخبر السيئ هو أن معظم إلى اللغات كمبيوتر حقيقي ليست "LALR (1)"، والذي يعني أنك تضطر الى اللجوء الى hackery كبيرة لجعل YACC تحليل إلى اللغات الحقيقية.

إذا كنت تقوم بتصميم DSL، يمكنك استخدام أي مولدات محلل LALR دون الكثير من المتاعب على وجه التحديد لأنه يمكنك تغيير النحوي DSL الخاص بك عندما النعيق مولد محلل. مولدات LL محلل معظمهم يعمل هنا أيضا لنفس السبب ولكن عدم وجود العودية اليسار يمكن أن يكون الألم الحقيقي.

إذا كنت uncomprising في الطريقة التي ترغب في بناء الجملة الخاصة بك، موزعي GLR هم الفائزون اليدين باستمرار. نستخدمها في DMS برنامج إعادة هندسة أدوات وبنينا موزعي جودة الإنتاج ل بعض 30+ اللغات بما في ذلك C ++، التي لديها نظرية الشعبية قائلا من المستحيل تقريبا لتحليل. بدأت نظرية الشعبية من قبل الأشخاص الذين يستخدمون LL وLALR موزعي لمحاولة التعامل مع C ++. GLR يفعل ذلك بسهولة.

وANTLR يجعل من السهل جدا استخدام الخيار lookahead غير محدودة "التراجع". قد تأهل أيضا الخاص بك أسهل للاستخدام وأسرع "معايير لأنه لديه ANTLRWORKS التي تسمح لك تصور وتصحيح قواعد اللغة الخاصة بك.

وهناك ميزة أخرى هي أنه يجعل بناء AST السهل بشكل مسلي مع المدمج في دعم لASTS المبنى الذي هو مفقود في البيسون.

ومع اثنين من الكتب المنشورة - 'ANTLR: دليل قاطع "و" اللغة أنماط التصميم "، وهي واحدة من بين أدوات موثقة بشكل جيد للغاية المتاحة. لديك أيضا قائمة بريدية نشطة للغاية.

وأنا لا أعرف ما الذي تبحث عنه بالضبط، ولكن أعتقد أن الدافع Xpressive يستحق النظر ...

وليس بالضبط مولد محلل لكن أداة عظيمة للتعامل مع قواعد النحو وأشعر أنه يمكن التعامل مع تلك غريبة.

ولقد تم استخدام نظام التوزيع GOLD ( http://www.devincook.com/goldparser) مع نتائج جيدة جدا. مشروعي هو صغير، ونظام توزيع لملفات NC في C. ولكن أعتقد أن أداة يمكن التعامل مع مشاريع أكثر تعقيدا أيضا.

وأحدث البيسون يدعي أن تفعل lookahead غير محدود، من خلال (سارية المفعول) القيام بعدة يوزع في وقت واحد. إذا كان لديك بالفعل الاستثمار في البيسون ومن ثم قد يكون من المفيد محاولة من ذلك، بدلا من التحول إلى حزمة أخرى.

http://www.gnu.org/software /bison/manual/bison.html#GLR-Parsers

وأنا لم تستخدم هذه الميزة نفسي، وإن كان.

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

LRSTAR 9.1 يمكن أن تولد LR (1) وLR (*) موزعي. وهو C ++ النظام القائم، ودية إلى Windows و Visual Studio. أنه يخلق موزعي الجدولية وlexers الجدولية، التي هي صغيرة وسريعة لتجميع. يمكن موزعي LRSTAR بناء على AST تلقائيا.

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