В петък, 2-ри август, беше публикувана версия на re2c — свободен генератор на лексикални анализатори за езици C и C++. Напомняме, че re2c е създаден през 1993 година от Питър Бамбулис като експериментален генератор на много бързи лексикални анализатори, отличаващ се от другите генератори с бързината на генерирания код и необичайно гъвкавия потребителски интерфейс, който позволява лесно и ефикасно внедряване на анализатори в съществуваща кодова база. Оттогава проектът напредва с помощта на общността и продължава да бъде платформа за експерименти и изследвания в областта на формалните граматики и крайни автомати.

Основни нововъведения в версия 1.2:

  • Добавен е нов (оптимизиран) метод за проверка на края на входните данни
    (на англ. „EOF rule“).
    За това е добавена конфигурация re2c:eof,
    която позволява избор на терминален символ,
    и специално правило $, което се задейства, ако лексерът
    успешно достигне края на входните данни.
    Исторически re2c предлага на потребителите няколко метода за проверка на
    края на входните данни, вариращи по ограничение, ефективност и простота
    на приложението. Новият метод има за цел да опрости написването на код, като същевременно
    остава ефективен и широко приложим. Старите методи
    продължават да работят и могат да бъдат предпочетени в определени случаи.

  • Добавена е възможност за включване на външни файлове с помощта на директивата
    /*!include:re2c "file.re" */, где file.re
    това е името на включвания файл. Re2c търси файлове в директорията на включвания файл,
    както и в списъка с пътища, зададени с помощта на опция -I.
    Включените файлове могат да включват други файлове.
    Re2c предоставя „стандартни“ файлове в директорията include/
    на проекта — предполага се, че там ще се събират полезни определения
    за регулярни изрази, нещо в духа на стандартната библиотека.
    Засега, по молба на потребителите, е добавен един файл с определения на категории Unicode.

  • Добавена е възможност за генериране на заглавни файлове с произволно
    съдържание с помощта на опции -t —type-header (или съответстващи
    конфигурации) и нови директиви /*!header:re2c:on*/ и
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    когато re2c трябва да генерира определения на променливи, структури и макроси,
    използвани в други единици на транслация.

  • Re2c вече разбира UTF8-литерали и класове символи в регулярни изрази.
    По подразбиране, re2c парсва изрази като "∀x ∃y" като.
    последователност от 1-битни ASCII символи e2 88 80 78 20 e2 88 83 79
    (hex-кодовете), и потребителите трябва да ескейпват Unicode символите ръчно:
    "u2200x u2203y". Това е много неудобно и неочаквано за мнозина
    потребители (както свидетелстват постоянните отчети за бъгове). Затова сега
    re2c предоставя опция —input-encoding ,
    която позволява да се промени поведението и да се анализира "∀x ∃y" като
    2200 78 20 2203 79.

  • Re2c сега позволява използването на обикновени блокове на re2c в режим -r —reuse.
    Това е удобно, ако входният файл съдържа много блокове, и само част от тях
    нуждаят се от повторно използване.

  • Добавена е възможност за задаване на формат на предупреждения и съобщения за грешки
    чрез новата опция —location-format . GNU форматът се показва
    като filename:line:column:, а MSVC форматът — като filename(line,column).
    Тази функция може да бъде полезна за любителите на IDE.
    Също така беше добавена опцията —verbose, която извежда кратко успешно съобщение при успех.

  • Беше подобрен режимът „съвместимост“ с flex — коригирани бяха някои грешки в анализа и
    някои неправилни приоритети на операторите в редки случаи.
    Исторически опцията -F —flex-support позволява писането на код
    в смешан стил flex и re2c, което малко затруднява синтактичния анализ.
    Режимът на съвместимост с flex рядко се използва в нов код,
    но re2c продължава да го поддържа за обратна съвместимост.

  • Операторът за изваждане на символни класове / сега се прилага
    преди разширяване на кодировката, което позволява да бъде прилаган в повече случаи,
    ако се използва кодировка с променлива дължина на символа (например UTF8).

  • Изходният файл сега се създава атомарно: re2c първо създава времемен файл
    и записва в него резултата, а след това преименува времения файл в изходния
    в една операция.

  • Документацията беше допълнена и пренаписана; в частност, беше добавена нова
    глава за запълване на буфера
    и за начини за проверка за край на входните данни.
    Новата документация е събрана в
    изчерпателен одностраничен наръчник
    с примери (едни и същи източници се показват в manpage и в онлайн документацията).
    Бяха направени слаби опити за подобряване на четимостта на сайта на телефони.

  • От гледна точка на разработчиците, re2c получи по-пълна подсистема
    за отстраняване на грешки. Кодът за отстраняване на грешки сега е деактивиран в релийните сборки и
    може да бъде включен с помощта на configure опцията —enable-debug.

Този релиз отне дълго време — почти цяла година.
Най-много време, както винаги, отне разработката на теоретичната основа и написването
статии „Efficient POSIX Submatch Extraction on NFA“.
Алгоритмите, описани в статията, са реализирани в експерименталната библиотека libre2c
(сборката на библиотеката и бенчмарковете е изключена по подразбиране и се включва с configure опцията
—enable-libs). Библиотеката не е замислена като конкурент на вече съществуващите
проекти като RE2, а като изследователска платформа за разработка на нови
алгоритми (които след това могат да се използват в re2c или в други проекти).
Също така, това е удобно от гледна точка на тестването, бенчмарковете и създаването на биндинги към други езици.

Благодаря от разработчиците на re2c на всички, които помогнаха този релиз да се осъществи,
и на цялото общество за идеи, отчети за бъгове, пачове, боен дух и т.н. ;]

Източник: linux.org.ru

Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри 🔥 Купете надежден хостинг за сайтове с защита от DDoS, VPS VDS сървъри | ProHoster