開催されました 解放する 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 カテゴリの定義を含む XNUMX つのファイルが追加されています。
任意のヘッダーファイルを生成する機能を追加しました。
содержанием при помощи опций «-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»
(XNUMX 進コード)、ユーザーは 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 など)。