Випуск генератора лексичних аналізаторів re2c 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.

Джерело: opennet.ru

Додати коментар або відгук