В петък, 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
