В понедельник 20 июля вышел релиз re2c – генератора быстрых лексических анализаторов. Основные изменения:
-
Добавлена поддержка языка Go (включается или опцией
--lang go
для re2c, или в виде отдельной программы re2go). Документация для C и Go генерируется из одного и того же текста, но с разными примерами кода. Полностью переработана подсистема кодогенерации в re2c, что должно облегчить поддержку новых языков в будущем. -
Добавлена альтернативная система сборки на CMake (спасибо ligfx!). Попытки перевести re2c на CMake предпринимались уже давно, но до ligfx никто не предложил полноценное решение. Старая система сборки на Autotools продолжает поддерживаться и использоваться, и в обозримом будущем нет планов от неё отказаться (отчасти чтобы не создавать проблем разработчикам дистрибутивов, отчасти потому что старая система сборки стабильнее и лаконичнее новой). Обе системы наравне непрерывно тестируются при помощи Travis CI.
-
Добавлена возможность задания интерфейсного кода в конфигурациях при использовании обобщённго АПИ (generic API). Раньше большинство АПИ приходилось задавать в форме функций или функциональных макросов. Теперь их можно задавать в форме произвольных строк с именованными шаблонными параметрами вида
@@{name}
или просто@@
(если параметр один и не возникает неоднозначности). Стиль АПИ задаётся конфигурациейre2c:api:style
(значениеfunctions
задаёт функциональный стиль, аfree-form
– произвольный). -
Улучшена работа опции
-c, --start-conditions
, позволяющей совмещать несколько взаимосвязанных лексеров в одном re2c-блоке. Теперь можно использовать обычные блоки наравне с условными и задавать несколько не связанных условных блоков в одном файле. Улучшена работа опции-r, --reuse
(повторное использование кода из одного блока в других блоках) в сочетании с опциями-c, --start-conditions
и-f, --storable-state
(лексер с сохраняемым состоянием, который можно прервать в произвольном месте и продолжить выполнение позже). -
Исправлена ошибка в недавно добавленном алгоритме обработки конца входных данных (EOF rule), приводившая в редких случаях к неправильной обработке перекрывающихся правил.
-
Упрощён процесс бутстрапа. Раньше система сборки пыталась динамически найти уже собранный re2c, который можно было бы использовать для пересборки самого себя. Это приводило к неправильным зависимостям (поскольку граф зависимостей получался динамическим, чего большинство систем сборки не любит). Теперь чтобы пересобрать лексеры, требуется в явном виде сконфигурировать систему сборки и задать переменную
RE2C_FOR_BUILD
.
Спасибо всем, кто участвовал в подготовке этого релиза!
>>> Подробности