В петък, 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 <ascii | utf8>,
    която позволява да се промени поведението и да се парсира "∀x ∃y" като
    2200 78 20 2203 79.

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

  • Появи се възможността за задаване на формата на предупрежденията и съобщенията за грешки
    чрез новата опция —location-format <gnu | msvc>. 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