Адбыўся рэліз re2c, вольнага генератара лексічных аналізатараў для моў C і C++ Нагадаем, што re2c быў напісаны ў 1993 году Пітэрам Бамбулісам як экспеіментальны генератар вельмі хуткіх лексічных аналізатараў, адрозны ад іншых генератараў хуткасцю згенераванага кода і незвычайна гнуткім карыстацкім інтэрфейсам, які дазваляе лёгка і эфектыўна ўсоўваць аналізатары ў існую кодавую базу. З таго часу праект развіваецца супольнасцю і працягвае заставацца пляцоўкай для эксперыментаў і даследаванняў у галіне фармальных граматык і канчатковых аўтаматаў.
Падрыхтоўка рэлізу заняла амаль цэлы год. Большасць часу, як заўсёды, пайшло на распрацоўку тэарэтычнай базы і напісанне
артыкулы «Efficient POSIX Submatch Extraction on NFA«.
Алгарытмы, апісаныя ў артыкуле, рэалізаваны ў эксперыментальнай бібліятэцы 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 спачатку стварае часовы файл
і піша ў яго вынік, а потым пераназывае часовы файл у выходны
адной аперацыяй.
З пункту гледжання распрацоўшчыкаў, re2c абзавёўся больш паўнавартаснай падсістэмай.
адладкі. Адладкавы код зараз адключаны ў рэлізных зборках і
можа быць уключаны з дапамогай configure-опцыі "-enable-debug".