Utgivelse av re2c 1.2 leksikalsk analysatorgenerator

fant sted utgivelse re2c, свободного генератора лексических анализаторов для языков C и C++. Напомним, что re2c был написан в 1993 году Питером Бамбулисом как экспеиментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встривать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.

Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание
статьи «Efficient POSIX Submatch Extraction on NFA".
Algoritmene beskrevet i artikkelen er implementert i det eksperimentelle biblioteket libre2c
(сборка библиотеки и тестов производительности выключена по умолчанию и включается configure-опцией «—enable-libs»). Библиотека задумана не как конкурент уже существующим проектам, таким как RE2, а как исследовательская площадка для разработки новых
алгоритмов (которые потом могут использоваться в re2c или в других проектах). Также это удобно с точки зрения тестирования, измерения производительности и создания биндингов к другим языкам.

Основные новшества в версии re2c 1.2:

  • Добавлен новый упрощённый способ проверки конца входных данных («EOF rule»). Для этого добавлена конфигурация «re2c:eof»,
    lar deg velge terminaltegnet,
    и специальное правило «$», которое срабатывает если лексер
    nådd slutten av inndataene.
    Historisk gir re2c et valg mellom flere verifiseringsmetoder for
    slutten av innganger som varierer i begrensning, effektivitet og enkelhet
    applikasjoner. Den nye metoden er designet for å forenkle skriving av kode, mens
    samtidig som den forblir effektiv og allment anvendelig. Gamle måter
    fungerer fortsatt og kan være foretrukket i noen tilfeller.

  • Lagt til muligheten til å inkludere eksterne filer ved hjelp av et direktiv
    «/*!include:re2c «file.re» */», где «file.re» — это имя включаемго файла. Re2c ищет файлы в директории включащего файла,
    а также в списке путей заданных с помощью опции «-I».
    Inkluderte filer kan inkludere andre filer.
    Re2c предоставляет «стандартные» файлы в директории «include/»
    prosjekt - det forventes at nyttige definisjoner vil samle seg der
    regulære uttrykk, noe sånt som standardbiblioteket.
    Så langt, på forespørsel fra arbeidere, er det lagt til én fil med definisjoner av Unicode-kategorier.

  • Lagt til muligheten til å generere header-filer med vilkårlig
    содержанием при помощи опций «-t —type-header» (или соответствующих
    конфигураций) и новых директив «/*!header:re2c:on*/» и
    «/*!header:re2c:off*/». Это может быть полезно в случаях,
    når re2c trenger å generere definisjoner av variabler, strukturer og makroer,
    brukes i andre oversettelsesenheter.

  • Re2c forstår nå UTF8 bokstaver og karakterklasser i regulære uttrykk.
    По умолчанию, re2c парсит выражения вроде «∀x ∃y» как
    последовательность 1-битных ASCII-символов «e2 88 80 78 20 e2 88 83 79»
    (hex-koder), og brukere må unnslippe Unicode-tegn manuelt:
    «\\u2200x \\u2203y». Это очень неудобно и неожиданно для многих
    brukere (som det fremgår av konstante feilrapporter). Så nå
    re2c предоставляет опцию «—input-encoding {ascii | utf8}»,
    которая позволяет изменить поведение и распарсить «∀x ∃y» как
    «2200 78 20 2203 79».

  • Re2c теперь позволяет использовать обычные re2c-блоки в режиме «-r —reuse».
    Dette er praktisk hvis inndatafilen inneholder mange blokker og bare noen av dem
    må gjenbrukes.

  • Nå kan du angi formatet for advarsler og feilmeldinger
    с помощью новой опции «—location-format {gnu | msvc}». GNU-формат отображается
    как «filename:line:column:», а MSVC-формат — как «filename(line,column)».
    Denne funksjonen kan være nyttig for IDE-elskere.
    Также была добавлена опция «—verbose», которая выводит краткое победоносное сообщение в случае успеха.

  • Доработан режим «совместимости» с flex — исправлены некоторые ошибки разбора и
    feil operatørprioritet i sjeldne tilfeller.
    Исторически опция «-F —flex-suppor» позволяет писать код
    blandet i flex-stil og re2c-stil, noe som gjør parsing litt vanskelig.
    Flex-kompatibilitetsmodus brukes sjelden i ny kode,
    men re2c fortsetter å støtte det for bakoverkompatibilitet.

  • Оператор вычитания символьных классов «/» теперь применяется
    før du utvider kodingen, noe som gjør at den kan brukes i et større antall tilfeller,
    hvis en koding med variabel tegnlengde brukes (for eksempel UTF8).

  • Utdatafilen er nå opprettet atomisk: re2c oppretter først en midlertidig fil
    og skriver resultatet inn i den, og gir deretter nytt navn til den midlertidige filen til utdata
    én operasjon.

  • Dokumentasjonen ble ferdigstilt og skrevet om; spesielt ble det lagt til nye
    главы про http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и om måter å se etter slutten av inndata.
    Den nye dokumentasjonen er samlet i skjemaet
    исчерпывающейго одностраничного руководства
    med eksempler (de samme kildene er gjengitt i manpage og i nettdokumentasjonen).
    Det er gjort dårlige forsøk på å forbedre lesbarheten til nettstedet på telefoner.

  • Fra utviklernes synspunkt har re2c anskaffet et mer komplett delsystem
    feilsøking Feilsøkingskode er nå deaktivert i utgivelsesbygg og
    может быть включен с помощью configure-опции «—enable-debug».

Kilde: opennet.ru

Legg til en kommentar