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 カテゴリの定義を含む 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 など)。

  • 出力ファイルがアトミックに作成されるようになりました。re2c は最初に一時ファイルを作成します。
    そして結果をそこに書き込み、一時ファイルの名前を出力に変更します。
    ワンオペレーション。

  • ドキュメントは完成し、書き直されました。 特に、新しいものが追加されました
    главы про http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и 入力データの終わりを確認する方法について.
    新しいドキュメントは次の形式で収集されます。
    исчерпывающейго одностраничного руководства
    例を示します (同じソースがマンページとオンライン ドキュメントで表示されます)。
    携帯電話でのサイトの読みやすさを向上させる試みは不十分です。

  • 開発者の観点から見ると、re2c はより完全なサブシステムを獲得しました。
    デバッグコードのデバッグはリリース ビルドでは無効になりました。
    может быть включен с помощью configure-опции «—enable-debug».

出所: オープンネット.ru

コメントを追加します