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

نوآوری های اصلی در نسخه 1.2:

  • یک راه جدید (ساده شده) برای بررسی پایان داده های ورودی اضافه شده است
    (انگلیسی "قانون EOF").
    برای این، پیکربندی re2c:eof اضافه شده است،
    به شما اجازه می دهد تا کاراکتر پایانه را انتخاب کنید،
    و یک قانون ویژه $ که اگر lexer شلیک می شود
    با موفقیت به پایان داده های ورودی رسید.
    از لحاظ تاریخی، re2c انتخابی از چندین روش تأیید را برای شما فراهم می کند
    پایان ورودی ها از نظر محدودیت، کارایی و سادگی متفاوت است
    برنامه های کاربردی. روش جدید برای ساده کردن نوشتن کد طراحی شده است
    در حالی که موثر و به طور گسترده قابل اجرا باقی می ماند. راههای قدیمی
    هنوز کار می کند و ممکن است در برخی موارد ترجیح داده شود.

  • اضافه شدن قابلیت گنجاندن فایل های خارجی با استفاده از دستورالعمل
    /*!include:re2c "file.re" */ که در آن file.re
    این نام فایل شامل است. Re2c به دنبال فایل ها در پوشه شامل فایل می گردد،
    و همچنین در لیست مسیرهای مشخص شده با استفاده از گزینه -I.
    فایل های ارائه شده ممکن است شامل فایل های دیگری باشد.
    Re2c فایل های "استاندارد" را در دایرکتوری include/ فراهم می کند
    پروژه - انتظار می رود که تعاریف مفیدی در آنجا جمع شوند
    عبارات منظم، چیزی شبیه به کتابخانه استاندارد.
    تا کنون به درخواست کارگران یک فایل با تعاریف دسته بندی یونیکد اضافه شده است.

  • اضافه شدن قابلیت تولید فایل های هدر با دلخواه
    محتوا با استفاده از گزینه های -t --type-header (یا مناسب
    تنظیمات) و دستورات جدید /*!header:re2c:on*/ و
    /*!header:re2c:off*/. این ممکن است در مواردی مفید باشد که
    زمانی که re2c نیاز به ایجاد تعاریف متغیرها، ساختارها و ماکروها دارد،
    در سایر واحدهای ترجمه استفاده می شود.

  • Re2c اکنون کلمات UTF8 و کلاس های کاراکتر را در عبارات منظم درک می کند.
    به طور پیش فرض، re2c عباراتی مانند "∀x ∃y" را به عنوان تجزیه می کند.
    دنباله ای از کاراکترهای ASCII 1 بیتی e2 88 80 78 20 e2 88 83 79
    (کدهای هگز)، و کاربران باید به صورت دستی از کاراکترهای یونیکد فرار کنند:
    "u2200x u2203y". این برای بسیاری بسیار ناخوشایند و غیرمنتظره است
    کاربران (همانطور که با گزارش های دائمی باگ مشهود است). بنابراین در حال حاضر
    re2c یک گزینه --input-encoding را فراهم می کند ،
    که به شما امکان می دهد رفتار را تغییر دهید و "∀x ∃y" را به عنوان تجزیه کنید
    2200 78 20 2203 79.

  • Re2c اکنون امکان استفاده از بلوک های معمولی re2c را در حالت -r --reuse می دهد.
    اگر فایل ورودی حاوی بلوک های زیادی و فقط برخی از آنها باشد، این کار راحت است
    نیاز به استفاده مجدد دارد

  • اکنون می توانید فرمت هشدارها و پیام های خطا را تنظیم کنید
    با استفاده از گزینه جدید --location-format . فرمت گنو نمایش داده می شود
    به عنوان نام فایل: خط: ستون:، و فرمت MSVC به عنوان نام فایل (خط، ستون).
    این ویژگی ممکن است برای دوستداران IDE مفید باشد.
    یک گزینه --verbose نیز اضافه شده است که در صورت موفقیت یک پیام کوتاه پیروزی چاپ می کند.

  • حالت "سازگاری" با flex بهبود یافته است - برخی از خطاهای تجزیه رفع شده اند و
    تقدم نادرست اپراتور در موارد نادر.
    از لحاظ تاریخی، گزینه -F --flex-support به شما امکان نوشتن کد را می داد
    ترکیبی در سبک flex و سبک re2c، که تجزیه را کمی دشوار می کند.
    حالت سازگاری فلکس به ندرت در کدهای جدید استفاده می شود،
    اما re2c همچنان از آن برای سازگاری با عقب پشتیبانی می کند.

  • عملگر تفریق کلاس کاراکتر / اکنون اعمال می شود
    قبل از گسترش رمزگذاری، که امکان استفاده از آن را در تعداد بیشتری از موارد فراهم می کند،
    اگر از رمزگذاری طول کاراکتر متغیر استفاده شود (مثلا UTF8).

  • فایل خروجی اکنون به صورت اتمی ایجاد می شود: re2c ابتدا یک فایل موقت ایجاد می کند
    و نتیجه را در آن می نویسد و سپس فایل موقت را به خروجی تغییر نام می دهد
    یک عملیات

  • مستندات تکمیل و بازنویسی شد. به طور خاص، موارد جدید اضافه شد
    فصل ها در مورد پر کردن بافر
    и در مورد روش هایی برای بررسی پایان داده های ورودی.
    اسناد جدید در فرم جمع آوری شده است
    کتابچه راهنمای جامع یک صفحه ای
    با مثال (همان منابع در صفحه manpage و در مستندات آنلاین ارائه شده است).
    تلاش های ضعیفی برای بهبود خوانایی سایت در تلفن ها انجام شده است.

  • از دیدگاه توسعه دهندگان، re2c زیرسیستم کامل تری را به دست آورده است
    اشکال زدایی کد اشکال زدایی اکنون در نسخه های انتشار و غیرفعال شده است
    را می توان با استفاده از گزینه configure --enable-debug فعال کرد.

این نسخه مدت زیادی طول کشید - تقریباً یک سال تمام.
بیشتر وقت، مثل همیشه، صرف ایجاد چارچوب نظری و نگارش شد
مقاله "استخراج کارآمد زیرمطابق POSIX در NFA".
الگوریتم های شرح داده شده در مقاله در کتابخانه تجربی libre2c پیاده سازی شده اند
(ساخت کتابخانه و بنچمارک ها به طور پیش فرض غیرفعال است و با گزینه configure فعال می شود.
--enable-libs). کتابخانه به عنوان رقیبی برای موجود تصور نمی شود
پروژه هایی مانند RE2، اما به عنوان یک پلت فرم تحقیقاتی برای توسعه جدید
الگوریتم ها (که سپس می توانند در re2c یا در پروژه های دیگر استفاده شوند).
همچنین از نظر آزمایش، معیارها و ایجاد اتصال به زبان های دیگر راحت است.

با تشکر از توسعه دهندگان re2c از همه کسانی که به این انتشار کمک کردند،
و به طور کلی به جامعه برای ایده ها، گزارش های باگ، وصله ها، روحیه و غیره. ;]

منبع: linux.org.ru

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