Выпуск генератора лексических анализаторов re2c 1.2

МЕНЮ


Искусственный интеллект
Поиск
Регистрация на сайте
Помощь проекту

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


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

Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание статьи "Efficient POSIX Submatch Extraction on NFA". Алгоритмы, описанные в статье, реализованы в экспериментальной библиотеке libre2c (сборка библиотеки и тестов производительности выключена по умолчанию и включается configure-опцией "--enable-libs"). Библиотека задумана не как конкурент уже существующим проектам, таким как RE2, а как исследовательская площадка для разработки новых алгоритмов (которые потом могут использоваться в re2c или в других проектах). Также это удобно с точки зрения тестирования, измерения производительности и создания биндингов к другим языкам.

Основные новшества в версии re2c 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 {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".

Источник: www.opennet.ru

Комментарии: