Издаден е генераторът на лексически анализатори re2c 1.2

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

Подготовката на версията отне почти цяла година. Повечето време, както винаги, беше посветено на разработването на теоретичната база и писането на
статията «Efficient POSIX Submatch Extraction on NFA«.
Алгоритмите, описани в статията, са реализирани в експерименталната библиотека libre2c
(изграждането на библиотеката и тестовете за производителност е деактивирано по подразбиране и се активира с конфигурационната опция «—enable-libs»). Библиотеката не е замислена като конкурент на вече съществуващите проекти, като RE2, а като изследователска платформа за разработване на нови
алгоритми (които след това могат да се използват в re2c или в други проекти). Освен това е удобно от гледна точка на тестването, измерването на производителността и създаването на биндинги към други езици.

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

  • Добавен е нов опростен начин за проверка на края на входните данни («EOF rule»). За това е добавена конфигурацията «re2c:eof»,
    която позволява да се избере терминален символ,
    и специално правило «$», което сработва, ако лексерът
    успешно е достигнал края на входните данни.
    Исторически re2c предлага на избор няколко начина за проверка на
    края на входните данни, вариращи по ограничения, ефективност и простота
    на приложение. Новият метод има за цел да опрости написването на код, като същевременно
    остава ефективен и широко приложим. Старите методи
    продължават да работят и могат да бъдат предпочитани в отделни случаи.
  • Добавена е възможността за включване на външни файлове с помощта на директива
    «!include:re2c «file.re» *», където «file.re» е името на включения файл. Re2c търси файлове в директорията на включващия файл,
    както и в списъка с пътища, зададени с помощта на опцията «-I».
    Включените файлове могат да съдържат други файлове.
    Re2c предоставя «стандартни» файлове в директорията «include/»
    на проекта — предполага се, че там ще се натрупват полезни определения
    на регулярни изрази, нещо в духа на стандартната библиотека.
    Досега, по поръчки на потребителите, бе добавен един файл с определения на категории Unicode.
  • Добавена е възможността да се генерират заглавни файлове с произволно
    съдържание с помощта на опции «-t —type-header» (или съответните
    конфигурации) и новите директиви «01!header:re2c:on*/» и
    «01!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-suppor» позволява да се пише код
    в смесен стил flex и re2c, което малко затруднява синтактичното парсиране.
    Режимът на съвместимост с flex рядко се използва в нов код,
    но re2c продължава да го поддържа за обратно съвместимост.
  • Операторът за изваждане на символните класове «/» вече се прилага
    преди разгръщането на кодировката, което позволява да се прилага в повече случаи,
    ако се използва кодировка с променлива дължина на символа (например UTF8).
  • Изходният файл сега се създава атомарно: re2c първо създава временен файл
    и записва резултата в него, а след това преименува времения файл в изходния
    с една операция.
  • Документацията беше допълнена и преработена; в частност, бяха добавени нови
    глави за http://re2c.org/manual/manual.html#buffer-refilling запълване на буфера
    и за методи за проверка на края на входните данни.
    Новата документация е събрана в
    изчерпателното едностранично ръководство
    с примери (едни и същи изходни кодове се изобразяват в manpage и в онлайн документация).
    Бяха направени незначителни опити за подобряване на четимостта на сайта на телефони.
  • От гледна точка на разработчиците, re2c получи по-подробна подсистема.
    отладка. Отладъчният код сега е изключен в релизните версии и
    може да бъде включена с помощта на конфигурационната опция «—enable-debug».

Източник: opennet.ru

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