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

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

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

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

  • Добавен е нов опростен начин за проверка на края на входящите данни („EOF правило“). За това е добавена конфигурация „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-suppor» позволява писането на код
    в смешан стил flex и re2c, което малко затруднява синтактичния анализ.
    Режимът на съвместимост с flex рядко се използва в нов код,
    но re2c продължава да го поддържа за обратна съвместимост.
  • Операторът за изваждане на символьни класове «/» сега се прилага
    преди разширяване на кодировката, което позволява да бъде прилаган в повече случаи,
    ако се използва кодировка с променлива дължина на символа (например UTF8).
  • Изходният файл сега се създава атомарно: re2c първо създава времемен файл
    и записва в него резултата, а след това преименува времения файл в изходния
    в една операция.
  • Документацията беше допълнена и пренаписана; в частност, беше добавена нова
    глави за http://re2c.org/manual/manual.html#buffer-refilling запълване на буфера
    и за начини за проверка за край на входните данни.
    Новата документация е събрана в
    изчерпателното едностранично ръководство
    с примери (едни и същи източници се показват в manpage и в онлайн документацията).
    Бяха направени слаби опити за подобряване на четимостта на сайта на телефони.
  • От гледна точка на разработчиците, re2c получи по-пълна подсистема
    за отстраняване на грешки. Кодът за отстраняване на грешки сега е деактивиран в релийните сборки и
    може да бъде активиран с помощта на configure-опцията «—enable-debug».

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

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