В понедельник 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.
Спасибо всем, кто участвовал в подготовке этого релиза!
ប្រភព: linux.org.ru