Frigivelse af re2c lexer generator 1.2

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

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

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

  • Добавлен новый упрощённый способ проверки конца входных данных («EOF rule»). Для этого добавлена конфигурация «re2c:eof»,
    giver dig mulighed for at vælge terminaltegnet,
    и специальное правило «$», которое срабатывает если лексер
    nåede slutningen af ​​inputdataene.
    Historisk set giver re2c et valg mellem flere verifikationsmetoder til
    slutningen af ​​input, der varierer i begrænsning, effektivitet og enkelhed
    applikationer. Den nye metode er designet til at forenkle skrivning af kode, mens
    samtidig med at den forbliver effektiv og bredt anvendelig. Gamle måder
    fungerer stadig og kan i nogle tilfælde foretrækkes.

  • Tilføjet muligheden for at inkludere eksterne filer ved hjælp af et direktiv
    «/*!include:re2c «file.re» */», где «file.re» — это имя включаемго файла. Re2c ищет файлы в директории включащего файла,
    а также в списке путей заданных с помощью опции «-I».
    Inkluderede filer kan omfatte andre filer.
    Re2c предоставляет «стандартные» файлы в директории «include/»
    projekt - det forventes, at der vil ophobes nyttige definitioner
    regulære udtryk, noget som standardbiblioteket.
    Indtil videre er der på anmodning af arbejdere tilføjet en fil med definitioner af Unicode-kategorier.

  • Tilføjet muligheden for at generere header-filer med vilkårlig
    содержанием при помощи опций «-t —type-header» (или соответствующих
    конфигураций) и новых директив «/*!header:re2c:on*/» и
    «/*!header:re2c:off*/». Это может быть полезно в случаях,
    når re2c skal generere definitioner af variabler, strukturer og makroer,
    bruges i andre oversættelsesenheder.

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

  • Re2c теперь позволяет использовать обычные re2c-блоки в режиме «-r —reuse».
    Dette er praktisk, hvis inputfilen indeholder mange blokke og kun nogle af dem
    skal genbruges.

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

  • Доработан режим «совместимости» с flex — исправлены некоторые ошибки разбора и
    forkert operatørprioritet i sjældne tilfælde.
    Исторически опция «-F —flex-suppor» позволяет писать код
    blandet i flex stil og re2c stil, hvilket gør parsing lidt svært.
    Flex-kompatibilitetstilstand bruges sjældent i ny kode,
    men re2c fortsætter med at understøtte det for bagudkompatibilitet.

  • Оператор вычитания символьных классов «/» теперь применяется
    før du udvider kodningen, hvilket gør det muligt at bruge det i et større antal tilfælde,
    hvis der anvendes en kodning med variabel tegnlængde (for eksempel UTF8).

  • Outputfilen oprettes nu atomisk: re2c opretter først en midlertidig fil
    og skriver resultatet ind i det, og omdøber derefter den midlertidige fil til outputtet
    én operation.

  • Dokumentationen blev færdiggjort og omskrevet; der kom især nye til
    главы про http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и om måder at tjekke for slutningen af ​​inputdata.
    Den nye dokumentation er samlet i skemaet
    исчерпывающейго одностраничного руководства
    med eksempler (de samme kilder er gengivet i manpagen og i onlinedokumentationen).
    Der er gjort dårlige forsøg på at forbedre læsbarheden af ​​webstedet på telefoner.

  • Fra udviklernes synspunkt har re2c fået et mere komplet delsystem
    fejlretning Fejlretningskode er nu deaktiveret i udgivelsesbuilds og
    может быть включен с помощью configure-опции «—enable-debug».

Kilde: opennet.ru

Tilføj en kommentar