The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Выпуск генератора лексических анализаторов re2c 1.2"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от opennews (??), 02-Авг-19, 19:30 
Состоялся (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.ru/opennews/art.shtml?num=51209

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Выпуск генератора лексических анализаторов re2c 1.2"  –2 +/
Сообщение от Аноним (1), 02-Авг-19, 19:30 
> Предупреждение: Вероятная угроза безопасности
> Firefox обнаружил вероятную угрозу безопасности и не стал открывать re2c.org. Если вы посетите этот сайт, нападавшие могут попытаться похитить вашу информацию, такую как пароли, адреса электронной почты или данные банковских карт.
> Сертификат действителен только для следующих доменов: *.github.com, github.com, *.github.io, github.io
> Код ошибки: SSL_ERROR_BAD_CERT_DOMAIN
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Выпуск генератора лексических анализаторов re2c 1.2"  +3 +/
Сообщение от имя (?), 02-Авг-19, 19:35 
Поздравляю, у тебя стоит аддон «HTTPS вездее, чем в списках EFF»
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Выпуск генератора лексических анализаторов re2c 1.2"  +5 +/
Сообщение от Аноним84701 (ok), 02-Авг-19, 19:58 
> нападавшие могут попытаться похитить вашу информацию, такую как пароли, адреса электронной почты или данные банковских карт.

Просто не вводите там пароли, явки, адреса или данные банковских карт!
Даже если найдете куда (а то лично я полей для ввода чего-либо вообще не замечаю).
Ваш Кэп

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от Аноним (3), 02-Авг-19, 19:41 
Крутая штука
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от Аноним (5), 02-Авг-19, 20:08 
Использую flex и bison, доволен. Но эту штуку тоже можно пощупать.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от neAnonim (?), 02-Авг-19, 20:21 
Потому что они в dragon book описаны или есть объективные причины.
Есть еще lex из openbsd
https://github.com/openbsd/src/blob/master/bin/csh/lex.c
Lemon из sqlite
И другие представители (wiki). + сабж

Я только начинаю изучать эту тему. Можете написать почему flex + bison

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от Аноним (5), 02-Авг-19, 20:41 
Выбирал не так долго, синтаксис показался весьма удобным. В cmake поддержка этой связки тоже оказалась из коробки.
Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

13. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от barmaglot (??), 05-Авг-19, 14:44 
Я тоже использовал bison и flex, до тех пор пока с этой штукой не познакомился. Разница огромна.  Парсер JSON на bison с лексером flex, до двух раз медленнее, чем на r2c.

Только гибкости у этой штуки маловато, но вот это исправление с EOF,  - НАКОНЕЦ!!! Столько извращений приходилось делать, и доп проверок что-бы за границы буфера не выходить.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Выпуск генератора лексических анализаторов re2c 1.2"  –1 +/
Сообщение от Аноним (8), 02-Авг-19, 22:43 
Юзаю CoCo/R для питона. На порядки быстрее, чем parglare - ближайшая альтернатива, более мощная, но тормозящая адски. Не говоря уже об остальных (согласно бенчмаркам автора его либа быстрее).
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

10. "Выпуск генератора лексических анализаторов re2c 1.2"  –6 +/
Сообщение от Michael Shigorinemail (ok), 03-Авг-19, 12:25 
> Юзаю CoCo/R для питона. На порядки быстрее, чем parglare

Надо же, хоть что-то конструктивного. :)

(этот же "провиндовый" персонаж спамил в соседних новостях деструктивно)

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

11. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от neAnonim (?), 03-Авг-19, 16:08 
У нас динамические ip. Если специально не заплачено за статический. С чего вы взяли что персонаж тот же?
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Выпуск генератора лексических анализаторов re2c 1.2"  –4 +/
Сообщение от Michael Shigorinemail (ok), 03-Авг-19, 16:15 
> У нас динамические ip. Если специально не заплачено
> за статический. С чего вы взяли что персонаж тот же?

IP тот же, временной промежуток небольшой, поведение характерное.  Это не гарантия, но с большой вероятностью таки тот же.

Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

15. "Выпуск генератора лексических анализаторов re2c 1.2"  +/
Сообщение от Amurzet (ok), 06-Авг-19, 13:09 
Занимался разработкой NetFlow коллектора, в разборе конфигов, а также языка фильтров для потока (типа offline файрвола) эти вещи (синтаксические/семантические анализаторы) были незаменимыми.

Для интересующихся рекомендую посмотреть на lemon (часть проекта SQLite).
т.е. lemon+re2c более современная связка чем lex(flex)/yacc(bison).

Например, reentrance (при многопоточности) поддерживается в классических утилитах очень коряво.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру