Выпуск генератара лексічных аналізатараў re2c 1.2

Адбыўся рэліз 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 спачатку стварае часовы файл
    і піша ў яго вынік, а потым пераназывае часовы файл у выходны
    адной аперацыяй.

  • Дакументацыя была дапісана і перапісана; у прыватнасці, былі дададзены новыя
    кіраўніка пра http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и пра спосабы праверкі на канец уваходных дадзеных.
    Новая дакументацыя сабрана ў выглядзе
    вычарпальнага аднастаронкавага кіраўніцтва
    з прыкладамі (адны і тыя ж зыходнікі адмалёўваюцца ў manpage і ў анлайн-дакументацыю).
    Былі зроблены слабыя спробы палепшыць чытальнасць сайта на тэлефонах.

  • З пункту гледжання распрацоўшчыкаў, re2c абзавёўся больш паўнавартаснай падсістэмай.
    адладкі. Адладкавы код зараз адключаны ў рэлізных зборках і
    можа быць уключаны з дапамогай configure-опцыі "-enable-debug".

Крыніца: opennet.ru

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