У понеділок, 20 липня, вийшов реліз re2c – генератора швидких лексичних аналізаторів.
Основні зміни:

  • Додано підтримку мови Go
    (включається або опцією-lang go для re2c, або у вигляді окремої програми re2go).
    Документація для C і Go генерується з одного і того ж тексту, але з різними
    прикладами коду. Повністю перероблено підсистему кодогенерації в re2c, що
    має полегшити підтримку нових мов у майбутньому.

  • Додана альтернативна система збирання на CMake (дякую) ligfx!).
    Спроби перевести re2c на CMake були вже давно, але до ligfx ніхто не
    запропонував повноцінне рішення.
    Стара система збирання на Autotools продовжує підтримуватися та використовуватись,
    і в найближчому майбутньому немає планів від неї відмовитися (частково щоб не створювати
    проблем розробникам дистрибутивів, частково тому, що стара система складання
    стабільніше і лаконічніше за нову).
    Обидві системи однаково безперервно тестуються за допомогою Travis CI.

  • Додано можливість завдання інтерфейсного коду у конфігураціях під час використання
    узагальненого АПІ (generic API). Раніше більшість АПІ доводилося ставити у формі
    функцій чи функціональних макросів. Тепер їх можна ставити у формі довільних
    рядків із іменованими шаблонними параметрами виду @@{name} або просто @@ (якщо
    параметр один і немає неоднозначності). Стиль АПА задається конфігурацією
    re2c:api:style (значення functions задає функціональний стиль, а free-form – довільний).

  • Поліпшено роботу опції -c, —start-conditions, що дозволяє поєднувати кілька
    взаємопов'язаних лексерів в одному re2c-блоці. Тепер можна використовувати
    звичайні блоки нарівні з умовними і задавати кілька не пов'язаних умовних
    блоків в одному файлі
    Поліпшено роботу опції -r, —reuse (повторне використання коду з одного блоку
    в інших блоках) у поєднанні з опціями -c, -start-conditions і -f, -storable-state
    (лексер із станом, що зберігається, який можна перервати в довільному місці
    та продовжити виконання пізніше).

  • Виправлено помилку в недавно доданому алгоритмі обробки кінця вхідних даних
    (EOF rule), що призводила в окремих випадках до неправильної обробки
    перекриваються правил.

  • Спрощено процес бутстрапу. Раніше система збирання намагалася динамічно знайти вже
    зібраний re2c, який можна було б використовувати для перескладання себе.
    Це призводило до неправильних залежностей (оскільки граф залежностей виходив
    динамічним, чого більшість систем збирання не любить).
    Тепер щоб перезбирати лексери, потрібно у явному вигляді
    конфігурувати систему складання та задати змінну RE2C_FOR_BUILD.

Дякую всім, хто брав участь у підготовці цього релізу!

Джерело: linux.org.ru

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