The OpenNET Project / Index page

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

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

22.07.2020 01:37

Состоялся релиз 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.


  1. Главная ссылка к новости (https://re2c.org/releases/rele...)
  2. OpenNews: Выпуск генератора лексических анализаторов re2c 1.2
  3. OpenNews: Создание лексического анализатора на Perl
  4. OpenNews: Google открыл код SyntaxNet, системы восприятия естественного языка
  5. OpenNews: Новая версия Bison 3.2, системы для написания синтаксических анализаторов
Автор новости: skvadrik
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/53408-re2c
Ключевые слова: re2c, lex
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (39) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Fracta1L (ok), 10:14, 22/07/2020 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –17 +/
     

  • 1.2, Аноним (2), 10:15, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ого, кто юзал, как оно?
     
     
  • 2.13, Аноним (14), 12:41, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не знаю, что за прога, но мне она понадобилась для сборки meson и прочего. Как и ccache (который гадит в ~/.ccache, не перепутать с ~/.cache).
     
  • 2.34, Олег (??), 15:11, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Я юзал. Норм.
     
  • 2.36, Аноним (36), 23:11, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    И что они анализируют? И с какой целью?
     
     
  • 3.37, Cradle (?), 00:53, 24/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    легковесные регекспы с интересными дополнениями, мне например в ембеддовке пригодится протоколы парсить
     
     
  • 4.39, Аноним (39), 14:18, 26/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Бинарные выражения тоже понимает? Можно скажем SMB описать?
     

  • 1.3, Повидло19 (?), 10:26, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Старая система сборки на Autotools продолжает поддерживаться и использоваться, и в обозримом будущем нет планов от неё отказаться (отчасти чтобы не создавать проблем разработчикам дистрибутивов, отчасти потому что старая система сборки стабильнее и лаконичнее новой).

    Вот и ответ.

     
     
  • 2.5, Аноним (5), 10:59, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Это отсебятина переводчика.

    >CMake build system. Thanks to ligfx for adding a CMake-based build system. This has been discussed multiple times in the past, and a few attempts at an implementation have been made, but ligfx was the first to contribute a full working implementation. The existing Autotools-based build system continues to be used and maintained for the foreseeable future.

     
     
  • 3.8, skvadrik (ok), 11:19, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +6 +/
    На самом деле это комментарий от автора (он же переводчик и разработчик обеих систем сборки). В оригинальной новости этого пояснения действительно нет.
     
     
  • 4.12, freehck (ok), 12:34, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Не будь такой скромной. =)
    Ты делаешь классное дело. Хорошая работа, Улюша! Так держать! =)
    PS: новая мажорная версия -- это своего рода рубеж, так что поздравляю
     
     
  • 5.27, skvadrik (ok), 22:58, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо. :)
     

  • 1.4, Cradle (?), 10:34, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо, не знал про этот проект, буду использовать
     
  • 1.6, Аноним (6), 11:04, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем это лучше фронтенда от LLVM?
     
     
  • 2.10, Cradle (?), 11:49, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    а что, к llvm есть фронтенд для трансляции регекспов в конечные автоматы  по ходу программы, не влияя на остальной код?
     

  • 1.7, Аноним (7), 11:19, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Выглядит как flex.
     
     
  • 2.9, Аноним (7), 11:20, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну в смысле bison.
     
  • 2.38, Олег (??), 09:09, 25/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Оно и есть как flex
     

  • 1.11, Аноним (11), 11:53, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Оно юзается в PHP.
     
  • 1.15, Аноним (15), 14:48, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Зато C самый быстрый, быстрее только ассемблер. Opera 12 парсит тяжелые html со списком пакетов репозитория гораздо быстрее Firefox. Никто с ней не сравнится в этом, даже Netsurf.

    Netsurf тоже на С написан.

     
     
  • 2.16, Аноним (7), 15:01, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Дичь какая-то. Не пытайтесь открывать https://mirror.yandex.ru/gentoo-distfiles/distfiles/ в фф -- я уже и вкладку закрыл, а всё равно ядрами молотит. В opera 69 кстати хотя бы работает, в фф вообще не открывается, нигде не отображается, и процесс можно только убить руками. Не стал ждать дольше 5 минут, может оно бы и загрузилось когда-нибудь, но нагрузка уж чересчур высокая. Elinks самый быстрый.
     
     
  • 3.17, Аноним (7), 15:05, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Виновато было вот это дополнение, но всё равно слишком медленно рендерит и загрузка очень высокая и без него https://addons.mozilla.org/en-US/firefox/addon/css-exfil-protection/
     
  • 3.18, Annoynymous (ok), 17:42, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    УМВР, загрузилось секунд за 20.
     
  • 3.19, hiveliberty (ok), 18:37, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Загрузилось в FF 78.0.2 за пару секунд.
     
     
  • 4.20, Аноним (7), 18:45, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Загрузилось в FF 78.0.2 за пару секунд.

    Дополнения? Там надо ещё поскроллить вниз, вот тогда начинает тормозить. Главного виновника, из-за которого не загружалось вовсе, я указал (просто запустил без дополнений в порядке эксперимента).

     
     
  • 5.24, hiveliberty (ok), 21:09, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот записал даже, для наглядности: https://youtu.be/S-dASP0Lo6w
    На скроллинге в одном месте запнулось и всё.
     
  • 4.21, анон (?), 19:06, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    тоже быстро
     
     
  • 5.22, Аноним (22), 20:17, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Тогда вот вам ссылочка поинтереснее
    https://archive.torproject.org/tor-package-archive/debs/main/t/tor
     
     
  • 6.25, hiveliberty (ok), 21:14, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    На это веселье ушло около 24 секунд, да (пока индикатор загрузки во вкладке бегал). Скроллинг сначала запнулся и дальше листает хорошо.
    Записать? :D
     
     
  • 7.29, Аноним (29), 04:22, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Мощный комп. На четвертопне Opera 12 около часа пашет (но съедает не более 512 мб памяти). Про Firefox и думать страшно. Там html весит 50 с лишним мб.
     
     
  • 8.33, hiveliberty (ok), 13:51, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    https prnt sc tn6dtc ... текст свёрнут, показать
     
  • 6.32, Ложечка (?), 13:47, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    А вот это грузится примерно минут в FF, и дальше отображается и прокручивается без проблем.
     
  • 3.31, Ложечка (?), 13:41, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Всё нормально грузится и отображается в FF. Разве что один раз при скроллинге лагнуло. Майнеры почистите что ли.
     
     
  • 4.35, Аноним (7), 15:12, 23/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    > Всё нормально грузится и отображается в FF. Разве что один раз при
    > скроллинге лагнуло. Майнеры почистите что ли.

    У меня лагает на каждом pagedown (белый экран).

     

  • 1.23, Аноним (-), 20:58, 22/07/2020 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >>релиз ...свободного генератора лексических анализаторов
    >>изначально... создан ... как ...генератор ...лексических анализаторов

    в то же время Wikipedia говорит -  "it is used in BRL-CAD as a platform-agnostic and easily compilable alternative to Flex and Bison" - т.е. замена и Lex-у и Yacc-у - автор! проясните всё же что это за программа? а то получается нужна только как "генератора лексических анализаторов", хотя по коду похоже что и замена синтаксическим?

     
     
  • 2.26, Аноним84701 (ok), 21:54, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +/
    >>>релиз ...свободного генератора лексических анализаторов
    >>>изначально... создан ... как ...генератор ...лексических анализаторов

    Оригинал:
    >> Re2c is a free and open-source lexer generator for C, C++ and Go. It compiles regular expressions to determinisitic finite automata and encodes the automata in the form of a program in the target language

    Если за последние полтора года ничего нового не добавили, то довольно простой и очень шустрый "токенизатор".
    > в то же время Wikipedia говорит

    Википедию те еще "спецы" пишут и правят (не так давно натыкался в статье о бмв изетте на переводы "от балды" - например "рождество" было переведено как "приключение". Начал смотреть, оказалось оно там было правильно, вернее просто отсутсвовало в таких деталях, а затем пришла вумная и авторитетная википэдэвушка и с умным и уверенным видом стала "править". Что она "направила" таким макаром в других статьях, я могу только гадать) 🙄

     
  • 2.28, skvadrik (ok), 23:26, 22/07/2020 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Я не автор текста на википедии, но там написано "Together with the Lemon parser generator, it is used in BRL-CAD as a platform-agnostic and easily compilable alternative to Flex and Bison". Тут нельзя начало предложения оторвать без потери смысла: re2c сравнивается с fleх, а lemon -- с bison. (Подредактирую статью, чтобы не было неоднозначности.)

    re2c -- это генератор лексеров, а не парсеров. Он умеет регулярные грамматики (Type-3 по классификации Хомского), и не умеет контекстно-свободные (Type-2) и выше. Для этих двух классов грамматик используются разные алгоритмы разбора: для регулярных -- конечные автоматы (finite state automata), а для контекстно-свободных -- стековые автоматы (pushdown automaton). Про всё это подробнее можно прочитать в книге "Parsing Techniques - A Practical Guide" [1].

    re2c никогда не будет уметь контекстно-свободные грамматики, потому что это была бы уже другая программа с другим алгоритмом и пользовательским интерфейсом. У меня на гитхабе есть lalr2c [2], что-то в духе re2c для LALR(1) грамматик -- он тоже генерирует не-табличные парсеры и позволяет пользователю писать интерфейсный код. Но он пока не вышел за рамки прототипа.

    [1] https://dickgrune.com/Books/PTAPG_1st_Edition/BookBody.pdf

    [2] https://github.com/skvadrik/lalr2c

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

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