hè accadutu liberazione re2c, свободного генератора лексических анализаторов для языков C и C++. Напомним, что re2c был написан в 1993 году Питером Бамбулисом как экспеиментальный генератор очень быстрых лексических анализаторов, отличающийся от других генераторов скоростью сгенерированного кода и необычно гибким пользовательским интерфейсом, который позволяет легко и эффективно встривать анализаторы в существующую кодовую базу. С тех пор проект развивается сообществом и продолжает оставаться площадкой для экспериментов и исследований в области формальных грамматик и конечных автоматов.
Подготовка релиза заняла почти целый год. Большинство времени, как всегда, ушло на разработку теоретической базы и написание
статьи «Efficient POSIX Submatch Extraction on NFA".
L'algoritmi descritti in l'articulu sò implementati in a libreria sperimentale libre2c
(сборка библиотеки и тестов производительности выключена по умолчанию и включается configure-опцией «—enable-libs»). Библиотека задумана не как конкурент уже существующим проектам, таким как RE2, а как исследовательская площадка для разработки новых
алгоритмов (которые потом могут использоваться в re2c или в других проектах). Также это удобно с точки зрения тестирования, измерения производительности и создания биндингов к другим языкам.
Основные новшества в версии re2c 1.2:
Добавлен новый упрощённый способ проверки конца входных данных («EOF rule»). Для этого добавлена конфигурация «re2c:eof»,
permette di selezziunà u caratteru terminale,
и специальное правило «$», которое срабатывает если лексер
ghjuntu successu à a fine di i dati di input.
Storicamente, re2c furnisce una scelta di parechji metudi di verificazione per
fine di inputs varieghja in limitazione, efficienza è simplicità
applicazioni. U novu mètudu hè designatu per simplificà u codice di scrittura, mentri
pur essendu efficace è largamente applicabile. Vechji modi
travaglia sempre è pò esse preferitu in certi casi.
Aggiunta a capacità di include i schedari esterni cù una direttiva
«/*!include:re2c «file.re» */», где «file.re» — это имя включаемго файла. Re2c ищет файлы в директории включащего файла,
а также в списке путей заданных с помощью опции «-I».
I schedari inclusi ponu include altri schedari.
Re2c предоставляет «стандартные» файлы в директории «include/»
prughjettu - hè previstu chì e definizione utili s'accumuleranu quì
espressioni rigulari, qualcosa cum'è a libreria standard.
Finu a ora, à a dumanda di i travagliadori, hè statu aghjuntu un schedariu cù definizioni di categurie Unicode.
Aggiunta a capacità di generà fugliali di header cù arbitraria
содержанием при помощи опций «-t —type-header» (или соответствующих
конфигураций) и новых директив «/*!header:re2c:on*/» и
«/*!header:re2c:off*/». Это может быть полезно в случаях,
quandu re2c hà bisognu di generà definizioni di variàbili, strutture è macros,
usatu in altre unità di traduzzione.
Re2c capisce avà i letterali UTF8 è e classi di caratteri in espressioni regulari.
По умолчанию, re2c парсит выражения вроде «∀x ∃y» как
последовательность 1-битных ASCII-символов «e2 88 80 78 20 e2 88 83 79»
(codici esadecimale), è l'utilizatori anu da scappà i caratteri Unicode manualmente:
«\\u2200x \\u2203y». Это очень неудобно и неожиданно для многих
utilizatori (cum'è evidenza da rapporti di bug custanti). Allora avà
re2c предоставляет опцию «—input-encoding {ascii | utf8}»,
которая позволяет изменить поведение и распарсить «∀x ∃y» как
«2200 78 20 2203 79».
Re2c теперь позволяет использовать обычные re2c-блоки в режиме «-r —reuse».
Questu hè convenientu se u schedariu di input cuntene parechji blocchi è solu alcuni di elli
deve esse riutilizzatu.
Avà vi ponu stabilisce u furmatu di avvirtimenti è missaghji errore
с помощью новой опции «—location-format {gnu | msvc}». GNU-формат отображается
как «filename:line:column:», а MSVC-формат — как «filename(line,column)».
Questa funzione pò esse utile per l'amatori IDE.
Также была добавлена опция «—verbose», которая выводит краткое победоносное сообщение в случае успеха.
Доработан режим «совместимости» с flex — исправлены некоторые ошибки разбора и
precedenza di l'operatore sbagliata in casi rari.
Исторически опция «-F —flex-suppor» позволяет писать код
mischju in stile flex è stile re2c, chì rende l'analisi un pocu difficiule.
U modu di cumpatibilità Flex hè raramente utilizatu in u novu codice,
ma re2c cuntinueghja à sustene per a cumpatibilità inversa.
Оператор вычитания символьных классов «/» теперь применяется
prima di espansione a codificazione, chì permette di esse usata in un numeru maiò di casi,
s'ellu hè aduprata una codificazione di caratteri variabile (per esempiu UTF8).
U schedariu di output hè avà creatu atomicu: re2c crea prima un schedariu tempurale
è scrive u risultatu in questu, è poi rinomina u schedariu pruvisoriu à l'output
una operazione.
Da u puntu di vista di i sviluppatori, re2c hà acquistatu un sottosistema più cumpletu
debugging U codice di debugging hè avà disattivatu in e versioni di liberazione è
может быть включен с помощью configure-опции «—enable-debug».