Состоялся (http://re2c.org/releases/release_notes.html) релиз re2c (http://re2c.org/), свободного генератора лексических анализаторов для языков C и C++. Напомним, что re2c был написан в 1993 году Питером Бамбулисом как экспеиментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встривать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.
Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание
статьи "Efficient POSIX Submatch Extraction on NFA (http://re2c.org/2019_borsotti_trofimovich_efficient_posix_su...)".
Алгоритмы, описанные в статье, реализованы в экспериментальной библиотеке 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 заполнение буфера (http://re2c.org/manual/manual.html#buffer-refilling)
и про способы проверки на конец входных данных (http://re2c.org/manual/manual.html#eof-handling).
Новая документация собрана в виде
исчерпывающейго одностраничного руководства (http://re2c.org/manual/manual.html)
с примерами (одни и те же исходники отрисовываются в manpage и в онлайн-документацию).
Были предприняты слабые попытки улучшить читаемость сайта на телефонах.
- С точки зрения разработчиков, re2c обзавёлся более полноценной подсистемой
отладки. Отладочный код теперь отключён в релизных сборках и
может быть включен с помощью configure-опции "--enable-debug".URL: http://re2c.org/releases/release_notes.html
Новость: https://www.opennet.dev/opennews/art.shtml?num=51209
> Предупреждение: Вероятная угроза безопасности
> Firefox обнаружил вероятную угрозу безопасности и не стал открывать re2c.org. Если вы посетите этот сайт, нападавшие могут попытаться похитить вашу информацию, такую как пароли, адреса электронной почты или данные банковских карт.
> Сертификат действителен только для следующих доменов: *.github.com, github.com, *.github.io, github.io
> Код ошибки: SSL_ERROR_BAD_CERT_DOMAIN
Поздравляю, у тебя стоит аддон «HTTPS вездее, чем в списках EFF»
> нападавшие могут попытаться похитить вашу информацию, такую как пароли, адреса электронной почты или данные банковских карт.Просто не вводите там пароли, явки, адреса или данные банковских карт!
Даже если найдете куда (а то лично я полей для ввода чего-либо вообще не замечаю).
Ваш Кэп
Крутая штука
Использую flex и bison, доволен. Но эту штуку тоже можно пощупать.
Потому что они в dragon book описаны или есть объективные причины.
Есть еще lex из openbsd
https://github.com/openbsd/src/blob/master/bin/csh/lex.c
Lemon из sqlite
И другие представители (wiki). + сабжЯ только начинаю изучать эту тему. Можете написать почему flex + bison
Выбирал не так долго, синтаксис показался весьма удобным. В cmake поддержка этой связки тоже оказалась из коробки.
Я тоже использовал bison и flex, до тех пор пока с этой штукой не познакомился. Разница огромна. Парсер JSON на bison с лексером flex, до двух раз медленнее, чем на r2c.Только гибкости у этой штуки маловато, но вот это исправление с EOF, - НАКОНЕЦ!!! Столько извращений приходилось делать, и доп проверок что-бы за границы буфера не выходить.
Юзаю CoCo/R для питона. На порядки быстрее, чем parglare - ближайшая альтернатива, более мощная, но тормозящая адски. Не говоря уже об остальных (согласно бенчмаркам автора его либа быстрее).
> Юзаю CoCo/R для питона. На порядки быстрее, чем parglareНадо же, хоть что-то конструктивного. :)
(этот же "провиндовый" персонаж спамил в соседних новостях деструктивно)
У нас динамические ip. Если специально не заплачено за статический. С чего вы взяли что персонаж тот же?
> У нас динамические ip. Если специально не заплачено
> за статический. С чего вы взяли что персонаж тот же?IP тот же, временной промежуток небольшой, поведение характерное. Это не гарантия, но с большой вероятностью таки тот же.
Занимался разработкой NetFlow коллектора, в разборе конфигов, а также языка фильтров для потока (типа offline файрвола) эти вещи (синтаксические/семантические анализаторы) были незаменимыми.Для интересующихся рекомендую посмотреть на lemon (часть проекта SQLite).
т.е. lemon+re2c более современная связка чем lex(flex)/yacc(bison).Например, reentrance (при многопоточности) поддерживается в классических утилитах очень коряво.