Re2c lexer генераторунун релизи 2.0

болуп өттү бошотуу re2c 2.0, свободного генератора лексических анализаторов для языков C и C++. Проект re2c изначально был создан в 1993 году Питером Бамбулисом как экспериментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встраивать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.

Негизги өзгөрүүлөр:

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

Source: opennet.ru

Комментарий кошуу