最近、複雑なコマンド ライン引数から出力ファイルを生成する既存のツールに、ソース ファイルの解析機能を追加しました。
コマンド ライン引数が非常に複雑になったため、非常に大きなコマンド ラインであるかのように解析されるファイルとして提供できるようになりましたが、構文は依然として扱いにくいものでした。そこで、より合理的な構文を使用してソース ファイルを解析する機能を追加しました。
Windows 用の flex 2.5.4 を使用して、このカスタム ソース ファイル形式のトークナイザーを生成しましたが、うまくいきました。しかし、私はコードが嫌いでした。グローバル変数、変な命名規則、そしてそれが生成する C++ コードはひどいものでした。既存のコード生成バックエンドは flex の出力にくっついていました - 私は yacc も bison も使いません。
私はそのコードに飛び込もうとしていますが、より優れた/より最新のツールを使用したいと考えています。誰かがそれを知っていますか。
- Windows コマンド プロンプトで実行します (Visual Studio との統合は問題ありませんが、ビルドには make ファイルを使用します)
- カプセル化された適切な C++ トークナイザーを生成します。(グローバル変数なし)
- トークン化ルールを記述するために正規表現を使用します (lex 構文と互換性があります)。
- ファイルの読み取りに c-runtime を使用する (または偽造する) ことを強制しません。(メモリから解析)
- ルールによってトークナイザーがバックトラックする (または自動的に修正する) 場合に警告します
- 変数名とメソッド名を完全に制御できます (既存の命名規則に従うことができます)
- 名前の競合なしに、複数のパーサーを単一の .exe にリンクできます
- 必要に応じて UNICODE (16 ビット UCS-2) パーサーを生成できます
- 統合されたトークナイザー + パーサージェネレーターではありません (lex + yacc の置き換えではなく、lex の置き換えが必要です)
トークン化テーブルのみが利用可能であれば、おそらくトークン化テーブルを生成するだけのツールで生活できるでしょう。