2 月 2 日金曜日、C および C++ 言語用の字句解析ツールの無料ジェネレーターである re2c のリリースがリリースされました。 Re1993c は、非常に高速な字句アナライザーの実験用ジェネレーターとして XNUMX 年に Peter Bamboulis によって作成されました。このジェネレーターは、生成されるコードの速度と、アナライザーを既存のコード ベースに簡単かつ効率的に組み込むことができる非常に柔軟なユーザー インターフェイスによって他のジェネレーターとは区別されます。 それ以来、このプロジェクトはコミュニティによって開発され、形式文法と有限状態マシンの分野における実験と研究のプラットフォームであり続けています。

バージョン 1.2 の主な革新:

  • 入力データの終わりを確認するための新しい (簡素化された) 方法を追加しました。
    (英語の「EOF ルール」)。
    このために、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 オプションを提供します、
    これにより、動作を変更して「∀x ∃y」を次のように解析できるようになります。
    2200 78 20 2203 79。

  • Re2c では、-r --reuse モードで通常の re2c ブロックを使用できるようになりました。
    これは、入力ファイルに多くのブロックが含まれており、そのうちの一部のみが含まれている場合に便利です。
    再利用する必要があります。

  • 警告とエラーメッセージの形式を設定できるようになりました
    新しい --location-format オプションを使用する。 GNU形式が表示される
    filename:line:column: として、MSVC 形式として filename(line,column) として指定されます。
    この機能は IDE 愛好家にとって役立つかもしれません。
    --verbose オプションも追加されており、成功した場合に短い勝利メッセージを出力します。

  • flex との「互換性」モードが改善されました - いくつかの解析エラーが修正されました。
    まれに、演算子の優先順位が間違っていることがあります。
    歴史的には、-F --flex-support オプションを使用するとコードを作成できました。
    flex スタイルと re2c スタイルが混在しているため、解析が少し難しくなります。
    Flex 互換モードが新しいコードで使用されることはほとんどありません。
    ただし、re2c は下位互換性のために引き続きサポートします。

  • 文字クラス減算演算子 / が適用されるようになりました
    エンコーディングを拡張する前に、エンコーディングをより多くの場合に使用できるようにします。
    可変文字長エンコーディングが使用されている場合 (UTF8 など)。

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

  • ドキュメントは完成し、書き直されました。 特に、新しいものが追加されました
    バッファの充填について
    и 入力データの終わりを確認する方法について.
    新しいドキュメントは次の形式で収集されます。
    包括的な XNUMX ページのマニュアル
    例を示します (同じソースがマンページとオンライン ドキュメントで表示されます)。
    携帯電話でのサイトの読みやすさを向上させる試みは不十分です。

  • 開発者の観点から見ると、re2c はより完全なサブシステムを獲得しました。
    デバッグコードのデバッグはリリース ビルドでは無効になりました。
    構成オプション --enable-debug を使用して有効にできます。

このリリースには長い時間がかかり、ほぼ XNUMX 年かかりました。
いつものように、ほとんどの時間は理論的枠組みの開発と執筆に費やされました。
記事 「NFA での効率的な POSIX サブマッチ抽出」.
この記事で説明されているアルゴリズムは、実験用ライブラリ libre2c に実装されています。
(ライブラリとベンチマークの構築はデフォルトでは無効になっており、configure オプションで有効になります
--enable-libs)。 このライブラリは既存のライブラリと競合するものとは考えられていません。
RE2 のようなプロジェクトだけでなく、新しい開発のための研究プラットフォームとしても
アルゴリズム (re2c または他のプロジェクトで使用できます)。
また、テスト、ベンチマーク、および他の言語へのバインディングの作成の観点からも便利です。

re2c 開発者から、このリリースの実現に協力してくれたすべての人に感謝します。
また、アイデア、バグレポート、パッチ、士気などについてはコミュニティ全般に送信してください。 ;]

出所: linux.org.ru

コメントを追加します