GNU gperf 3.3 — CLI(2025年4月)

名称

gperf - キー集合から完全ハッシュ関数を生成する

書式

gperf [OPTION]... [INPUT-FILE]

説明

GNU 'gperf'は完全ハッシュ関数を生成します。

長いオプションで引数が必須とされている場合、対応する短いオプションでも引数は必須です。

出力ファイルの場所:

--output-file=FILE 出力を指定したファイルに書き込みます。

出力ファイルを指定しない場合、または-を指定した場合、結果は標準出力に書き込まれます。

入力ファイルの解釈:

-e, --delimiters=DELIMITER-LIST
キーワードとその属性を区切るための区切り文字を含む文字列を、利用者が指定できます。デフォルトは「,」です。
-t, --struct-type
生成コードに構造化された型の宣言を含められます。%%より前のテキストはすべて、型宣言の一部とみなされます。その後にキーワードと追加のフィールドを記述でき、1行につきフィールドの組を1つ置きます。
--ignore-case
ASCII文字の大文字と小文字を同等とみなします。ロケールに依存する大文字・小文字の対応は無視されることに注意してください。

出力コードの言語:

-L, --language=LANGUAGE-NAME
指定した言語のコードを生成します。現在対応している言語はC++、ANSI-C、C、KR-Cです。デフォルトはANSI-Cです。

出力コードの詳細:

-K, --slot-name=NAME
キーワード構造体内でキーワードを格納するメンバーの名前を選択します。
-F, --initializer-suffix=INITIALIZERS
キーワード構造体の追加メンバーの初期化子を指定します。
-H, --hash-function-name=NAME
生成するハッシュ関数の名前を指定します。デフォルトは'hash'です。
-N, --lookup-function-name=NAME
生成する検索関数の名前を指定します。デフォルトの名前は'in_word_set'です。
-Z, --class-name=NAME
生成するC++クラスの名前を指定します。デフォルトの名前は'Perfect_Hash'です。
-7, --seven-bit
7ビット文字を仮定します。
-l, --compare-lengths
文字列の比較を試みる前に、キーの長さを比較します。キーワードにNULバイトが含まれる場合に必要です。また、検索時の文字列比較の回数を減らすのにも役立ちます。
-c, --compare-strncmp
strcmpの代わりにstrncmpを使う比較コードを生成します。
-C, --readonly-tables
生成する検索テーブルの内容を定数、つまり読み取り専用にします。
-E, --enum
defineの代わりに、検索関数内のローカルなenumを使って定数値を定義します。
-I, --includes
コードの先頭に、必要なシステムのインクルードファイル<string.h>を含めます。
-G, --global-table
キーワードの静的テーブルを、検索関数の中に隠すデフォルトの動作ではなく、静的なグローバル変数として生成します。
-P, --pic
生成するテーブルを共有ライブラリに組み込むために最適化します。生成コードを含む共有ライブラリを使うプログラムの起動時間を短縮します。
-Q, --string-pool-name=NAME
--picオプションで生成する文字列プールの名前を指定します。デフォルトの名前は'stringpool'です。
--null-strings
空のキーワードテーブル項目に、空文字列の代わりにNULL文字列を使います。
--constants-prefix=PREFIX
TOTAL_KEYWORDSなどの定数に付ける接頭辞を指定します。
-W, --word-array-name=NAME
キーワード一覧の配列名を指定します。デフォルトの名前は'wordlist'です。
--length-table-name=NAME
長さのテーブルの配列名を指定します。デフォルトの名前は'lengthtable'です。
-S, --switch=COUNT
生成するCコードで、配列の検索テーブルの代わりにswitch文方式を使います。キーファイルによっては、必要な実行時間と記憶領域の両方を減らせます。COUNT引数は、生成するswitch文の数を指定します。値が1なら全要素を含む1つのswitchを生成し、値が2なら各テーブルに要素の半分ずつを含む2つのテーブルを生成します。ほかの値でも同様です。COUNTが1000000のように非常に大きい場合、生成するCコードは二分探索を行います。
-T, --omit-struct-type
型の宣言を出力ファイルへ転送しないようにします。型がすでにほかの場所で定義されている場合に使ってください。

gperfが使うアルゴリズム:

-k, --key-positions=KEYS
ハッシュ関数で使うキー位置を選択します。指定できる位置は1から255までです。位置はカンマで区切り、範囲でも指定できます。キー位置の順序は任意です。また、メタ文字「*」を指定すると、生成するハッシュ関数はすべてのキー位置を使用し、$はキーの「最後の文字」を表します。例は$,1,2,4,6-10です。
-D, --duplicates
ハッシュ値が重複するキーワードを処理します。冗長性が非常に高い一部のキーワード集合で役立ちます。
-m, --multiple-iterations=ITERATIONS
-iと-jの値を複数通り試し、最良の結果を選びます。実行時間はITERATIONS倍になりますが、生成するテーブルのサイズを小さくするのに効果があります。
-i, --initial-asso=N
関連値配列の初期値を指定します。デフォルトは0です。この値を大きくすると、最終的なテーブルのサイズを大きくするのに役立ちます。
-j, --jump=JUMP-VALUE
「ジャンプ値」、つまり衝突時に関連する文字の値をどれだけ進めるかに影響します。奇数でなければならず、デフォルトは5です。
-n, --no-strlen
ハッシュ関数の計算に、キーワードの長さを含めません。
-r, --random
関連値テーブルの初期化に乱数を使います。
-s, --size-multiple=N
生成するハッシュテーブルのサイズに影響します。数値引数Nは、関連値の範囲をキーの数に対して「何倍大きく、または小さく」するかを示します。たとえば、値が3なら「関連値の最大値を入力キー数の約3倍まで許す」という意味です。逆に、1/3なら「関連値の最大値を入力キー数の約3分の1にする」という意味です。テーブルを大きくすると、追加の領域を必要とする代わりに、検索が不成功に終わるまでの時間が短くなると考えられます。デフォルトは1です。

情報の出力:

-h, --help
このメッセージを表示します。
-v, --version
gperfのバージョン番号を表示します。
-d, --debug
デバッグオプションを有効にします。標準エラー出力に詳細な出力を行います。

著者

Douglas C. SchmidtとBruno Haibleが作成しました。

不具合の報告

不具合は<bug-gperf@gnu.org>に報告してください。

Copyright © 2025 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

関連項目

gperfの完全な文書はTexinfoマニュアルとして保守されています。infoとgperfのプログラムが正しくインストールされていれば、次のコマンドで

info gperf

完全なマニュアルを参照できるはずです。