У панядзелак 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

Дадаць каментар