انتشار re2c lexer generator 1.2

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

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

نوآوری های اصلی در نسخه re2c 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 {ascii | utf8}",
    که به شما امکان می دهد رفتار را تغییر دهید و "∀x ∃y" را به عنوان تجزیه کنید
    “2200 78 20 2203 79.”

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

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

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

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

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

  • مستندات تکمیل و بازنویسی شد. به طور خاص، موارد جدید اضافه شد
    فصل هایی در مورد http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и در مورد روش هایی برای بررسی پایان داده های ورودی.
    اسناد جدید در فرم جمع آوری شده است
    راهنمای جامع یک صفحه ای
    با مثال (همان منابع در صفحه manpage و در مستندات آنلاین ارائه شده است).
    تلاش های ضعیفی برای بهبود خوانایی سایت در تلفن ها انجام شده است.

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

منبع: opennet.ru

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