الافراج عن مولد re2c lexer 2.0

يأخذ مكانا الإفراج عن re2c 2.0، مولد محلل معجمي مجاني لـ C و C ++. تم إنشاء مشروع re2c في الأصل في عام 1993 بواسطة Peter Bamboulis كمولد تجريبي للمحللات المعجمية السريعة جدًا ، والتي تتميز عن المولدات الأخرى بسرعة الشفرة التي تم إنشاؤها وواجهة مستخدم مرنة بشكل غير عادي تسمح للمحللين بالتكامل بسهولة وكفاءة في قاعدة بيانات موجودة . منذ ذلك الحين ، تم تطوير المشروع من قبل المجتمع ولا يزال يمثل منصة للتجارب والبحث في مجال القواعد الرسمية وآلات الدولة.

التغييرات الرئيسية:

  • دعم إضافي للغة Go (يتم تمكينه إما عن طريق خيار "-lang go" لـ re2c ، أو كبرنامج re2go منفصل). يتم إنشاء وثائق C و Go من نفس النص ، ولكن مع أمثلة رمز مختلفة. تمت إعادة تصميم النظام الفرعي لتوليد الكود في re2c بالكامل ، مما يجعل من السهل دعم لغات جديدة في المستقبل.
  • تمت إضافة نظام بناء بديل على CMake (شكرًا ligfx!). لقد بذلت محاولات ترجمة re2c إلى CMake لفترة طويلة ، ولكن قبل ligfx ، لم يقدم أحد حلاً كاملاً. يستمر دعم نظام البناء القديم على Autotools واستخدامه ، ولا توجد خطط للتخلي عنه في المستقبل المنظور (جزئيًا لتجنب مشاكل مطوري التوزيع ، ويرجع ذلك جزئيًا إلى أن نظام البناء القديم أكثر استقرارًا وأكثر إيجازًا من النظام الجديد ). يتم اختبار كلا النظامين بشكل مستمر باستخدام Travis CI.
  • تمت إضافة القدرة على تحديد رمز الواجهة في التكوينات عند استخدام واجهة برمجة التطبيقات العامة (واجهة برمجة التطبيقات العامة). في الماضي ، كان لابد من تعريف معظم واجهات برمجة التطبيقات في شكل وظائف أو وحدات ماكرو وظيفية. الآن يمكن تحديدها في شكل سلاسل عشوائية مع معلمات نموذج مسماة على شكل "{name}" أو ببساطة "" (إذا كان هناك معامل واحد فقط ولم يكن هناك غموض). يتم تعيين نمط API بواسطة تكوين re2c: api: style (تحدد قيمة الوظائف النمط الوظيفي ، بينما تكون قيمة الشكل الحر عشوائية).
  • تشغيل محسّن لخيار "-c" ، "--start-condition" ، والذي يسمح بدمج العديد من lexers المترابطة في كتلة re2c واحدة. يمكنك الآن استخدام الكتل العادية وكذلك الكتل الشرطية وتحديد العديد من الكتل الشرطية غير ذات الصلة في ملف واحد. خيارات محسّنة "-r" و "- إعادة استخدام" (إعادة استخدام رمز من كتلة واحدة في كتل أخرى) جنبًا إلى جنب مع "-c" و "- شروط البدء" و "-f" و "--storable-state" خيارات (معجم ذو حالة يمكن مقاطعته عند نقطة عشوائية واستئنافه لاحقًا).
  • تم إصلاح خطأ في خوارزمية معالجة نهاية الإدخال المضافة مؤخرًا (قاعدة EOF) ، والتي أدت في حالات نادرة إلى معالجة غير صحيحة لقواعد التداخل.
  • عملية تمهيدية مبسطة. في السابق ، حاول نظام البناء العثور ديناميكيًا على re2c الذي تم إنشاؤه بالفعل والذي يمكن استخدامه لإعادة بناء نفسه. نتج عن ذلك تبعيات غير صحيحة (حيث تبين أن الرسم البياني للتبعية ديناميكي ، وهو ما لا تحبه معظم أنظمة البناء). الآن ، لإعادة بناء lexers ، تحتاج إلى تكوين نظام الإنشاء بشكل صريح وتعيين متغير RE2C_FOR_BUILD.

المصدر: opennet.ru

إضافة تعليق