Module Arg


module Arg: sig .. end
コマンドライン引数の解析

このモジュールはプログラムのコマンドラインからオプションとその引数を取り出すための一般的な仕組みを提供します。

コマンドラインの構文は次のようになります。 キーワードは - から始まる文字列です。 オプションはキーワード単体、またはそれに引数の続いたものです。 キーワードの種類には UnitBoolSetClearStringSet_stringIntSet_intFlaotSet_floatTupleSymbolRest があります。 UnitSetClear キーワードは引数は取りません。 Rest キーワードはコマンドライン引数の残りを引数として取ります。 それ以外のキーワードはコマンドラインで直後に来た文字列を引数として取ります。 キーワードに後続しない引数は無名引数と呼びます。

例(cmd はコマンドの名前とします):




type spec =
| Unit of (unit -> unit) (*ユニットを引数として関数を呼び出します*)
| Bool of (bool -> unit) (*真偽値引数を引数として関数を呼び出します*)
| Set of bool ref (*リファレンスの値を真に設定します*)
| Clear of bool ref (*リファレンスの値を偽に設定します*)
| String of (string -> unit) (*文字列引数を引数として関数を呼び出します*)
| Set_string of string ref (*リファレンスの値を文字列引数の値に設定します*)
| Int of (int -> unit) (*整数引数を引数として関数を呼び出します*)
| Set_int of int ref (*リファレンスの値を整数引数の値に設定します*)
| Float of (float -> unit) (*浮動小数点数引数を引数として関数を呼び出します*)
| Set_float of float ref (*リファレンスの値を浮動小数点数引数の値に設定します*)
| Tuple of spec list (*spec list に従って複数の引数を取ります*)
| Symbol of string list * (string -> unit) (*シンボルのうちいずれかを引数として取り、それを引数として関数を呼び出します*)
| Rest of (string -> unit) (*キーワードの解釈を停止し、残りの引数各々を引数として関数を呼び出します*)
対応するキーワードの振る舞いを記述するための具象型です。
type key = string 
type doc = string 
type usage_msg = string 
type anon_fun = string -> unit 
val parse : (key * spec * doc) list -> anon_fun -> usage_msg -> unit
Arg.parse speclist anon_fun usage_msg はコマンドラインを解析します。 speclist(key, spec, doc) の三つ組のリストです。 key はオプションのキーワードで '-' から始まらなければなりません。 spec はオプションの種類と、コマンドラインでそのオプションに遭遇したときに呼び出される関数を指定します。 doc はこのオプションを一行で説明する文字列です。 anon_fun は無名引数に対して呼び出されます。 specanon_fun で指定された関数は対応する引数がコマンドラインに現れた順に呼び出されます。

エラーが起こった場合には Arg.parse は以下のエラーメッセージを表示してプログラムを終了させます。

- で始まる無名引数を指定したい場合には、 speclist に例えば ("-" String anon_fun, doc) のように書きます。

parse はデフォルトで -help--help というユニットオプションを理解します。 これらのオプションは usage_msg とオプションのリストを表示し、プログラムを終了します。 speclist-help オプションや --help オプションの指定を追加すればこの動作を上書きすることができます。

val parse_argv : ?current:int ref ->
string array ->
(key * spec * doc) list -> anon_fun -> usage_msg -> unit
Arg.parse_args ~current args speclist anon_fun usage_msg は配列 args をコマンドライン引数と見做して解析します。 ~current が与えられた場合はそれを、与えられなかった場合は Arg.current を更新しながら解析をします。 parse_args を呼び出す前に Arg.current を設定しておかなければなりません。 current の初期値は配列中でプログラム名(第 0 引数)を表す添字です。 エラーが起こった場合には、エラーメッセージを引数として Arg.Bad 例外が発生します。 -help オプションや --help オプションが渡された場合には、エラーメッセージを引数として Arg.Help 例外が発生します。
exception Help of string
利用者が -help--help を与えた場合に Arg.parse_args が発生させます。
exception Bad of string
spec 中の関数や anon_fun は不正な引数を受け取ったときにエラーメッセージとともに Arg.Bad 例外を発生させることができます。 また、 Arg.parse_argv でエラーが起こった場合にも発生します。
val usage : (key * spec * doc) list -> usage_msg -> unit
Arg.usage speclist usage_msg は有効なコマンドライン引数を含むエラーメッセージを表示します。 これは Arg.parse がエラーのときに表示するものと同じメッセージです。 speclistusage_msgArg.parse に渡すものと同じです。
val align : (key * spec * doc) list -> (key * spec * doc) list
キーワードの長さに従って doc 文字列の先頭に空白を入れ、 doc 文字列を整形します。 文字列全体を右に寄せたい場合には doc 文字列の先頭に空白を入れてください。 Symbol 引数に対応する doc 文字列は改行したうえで表示するように整形されます。
val current : int ref
現在処理中の引数の(Sys.argv 中での)位置を表します。 引数を読み飛ばすためにこの値を変更することもできます。 Arg.parse は呼び出し時の Arg.current の値が第 0 引数(プログラム名)の位置を表しているものとし、その次の要素から引数の解析を始めます。