انتشار re2c lexer generator 2.0

صورت گرفت رهایی re2c 2.0، یک مولد تحلیلگر واژگانی رایگان برای زبان های C و C++. پروژه re2c در ابتدا در سال 1993 توسط پیتر بامبولیس به عنوان یک مولد آزمایشی تحلیلگرهای واژگانی بسیار سریع ایجاد شد که با سرعت کد تولید شده و یک رابط کاربری غیرعادی منعطف که به تحلیلگرها اجازه می دهد به راحتی و کارآمد در یک موجود جاسازی شوند از سایر مولدها متمایز شد. پایه کد از آن زمان، این پروژه توسط جامعه توسعه یافته است و همچنان بستری برای آزمایش ها و تحقیقات در زمینه گرامرهای رسمی و ماشین های حالت محدود است.

تغییرات اصلی:

  • پشتیبانی اضافه شده برای زبان Go (فعال شده توسط گزینه "--lang go" برای re2c یا به عنوان یک برنامه re2go جداگانه). مستندات C و Go از یک متن، اما با نمونه‌های کد متفاوت تولید می‌شوند. زیرسیستم تولید کد در re2c کاملاً بازطراحی شده است که در آینده پشتیبانی از زبان‌های جدید را آسان‌تر می‌کند.
  • سیستم ساخت جایگزین در CMake اضافه شد (با تشکر ligfx!). تلاش برای ترجمه re2c به CMake برای مدت طولانی انجام شده است، اما تا قبل از ligfx هیچ کس راه حل کاملی را پیشنهاد نکرد. سیستم ساخت قدیمی Autotools همچنان پشتیبانی و استفاده می شود و هیچ برنامه ای برای کنار گذاشتن آن در آینده قابل پیش بینی وجود ندارد (تا حدی برای جلوگیری از ایجاد مشکل برای توسعه دهندگان توزیع، تا حدی به این دلیل که سیستم ساخت قدیمی پایدارتر و مختصرتر از سیستم جدید است. ). هر دو سیستم به طور مداوم با استفاده از Travis CI آزمایش می شوند.
  • قابلیت تعیین کد رابط در تنظیمات هنگام استفاده از API عمومی اضافه شده است. پیش از این، بیشتر APIها باید در قالب توابع یا ماکروهای تابع مشخص می شدند. اکنون می‌توان آن‌ها را در قالب رشته‌های دلخواه با پارامترهای الگوی نام‌گذاری‌شده به شکل «@@{name}» یا به سادگی «@@» (اگر فقط یک پارامتر وجود داشته باشد و ابهامی وجود نداشته باشد) مشخص شود. سبک API توسط پیکربندی re2c:api:style تنظیم می‌شود (مقدار توابع سبک عملکردی را مشخص می‌کند و فرم آزاد یک سبک دلخواه را مشخص می‌کند).
  • عملکرد گزینه "-c"، "-start-conditions" بهبود یافته است و به شما امکان می دهد چندین lexer به هم پیوسته را در یک بلوک re2c ترکیب کنید. حالا می توانید از بلوک های معمولی به همراه بلوک های شرطی استفاده کنید و چندین بلوک شرطی نامرتبط را در یک فایل تعریف کنید. عملکرد بهبود یافته گزینه "-r"، "--reuse" (استفاده مجدد از کد یک بلوک در بلوک های دیگر) در ترکیب با "-c"، "--start-conditions" و "-f"، "-- گزینه های storable-state" (یک lexer حالتی که می تواند در هر نقطه ای قطع شود و بعدا اجرا را ادامه دهد).
  • یک اشکال در الگوریتم انتهای ورودی (قانون EOF) که اخیراً اضافه شده است، رفع شد، که در موارد نادر منجر به پردازش نادرست قوانین همپوشانی می‌شود.
  • فرآیند بوت استرپ ساده شده است. پیش از این، سیستم ساخت سعی می کرد به صورت پویا یک re2c از قبل ساخته شده را پیدا کند که می تواند برای بازسازی خود استفاده شود. این منجر به وابستگی های نادرست شد (زیرا نمودار وابستگی پویا بود که اکثر سیستم های ساختنی آن را دوست ندارند). اکنون، برای بازسازی lexers، باید به صراحت سیستم ساخت را پیکربندی کرده و متغیر RE2C_FOR_BUILD را تنظیم کنید.

منبع: opennet.ru

اضافه کردن نظر