module Arg:コマンドライン引数の解析sig
..end
このモジュールはプログラムのコマンドラインからオプションとその引数を取り出すための一般的な仕組みを提供します。
コマンドラインの構文は次のようになります。
キーワードは -
から始まる文字列です。
オプションはキーワード単体、またはそれに引数の続いたものです。
キーワードの種類には Unit
、 Bool
、 Set
、 Clear
、
String
、 Set_string
、 Int
、 Set_int
、 Flaot
、 Set_float
、
Tuple
、 Symbol
、 Rest
があります。
Unit
、 Set
、 Clear
キーワードは引数は取りません。
Rest
キーワードはコマンドライン引数の残りを引数として取ります。
それ以外のキーワードはコマンドラインで直後に来た文字列を引数として取ります。
キーワードに後続しない引数は無名引数と呼びます。
例(cmd
はコマンドの名前とします):
cmd -flag
: unit オブションcmd -int 1
: 1
を引数とする int オプションcmd -string foobar
: "foobar"
を引数とする string オプションcmd -float 12.34
: 12.34
を引数とする float オプションcmd a b c
: みっつの無名引数 "a"
、 "b"
、 "c"
cmd a b -- c d
: ふたつの無名引数と二引数の rest オプションtype
spec =
| |
Unit of |
(* | ユニットを引数として関数を呼び出します | *) |
| |
Bool of |
(* | 真偽値引数を引数として関数を呼び出します | *) |
| |
Set of |
(* | リファレンスの値を真に設定します | *) |
| |
Clear of |
(* | リファレンスの値を偽に設定します | *) |
| |
String of |
(* | 文字列引数を引数として関数を呼び出します | *) |
| |
Set_string of |
(* | リファレンスの値を文字列引数の値に設定します | *) |
| |
Int of |
(* | 整数引数を引数として関数を呼び出します | *) |
| |
Set_int of |
(* | リファレンスの値を整数引数の値に設定します | *) |
| |
Float of |
(* | 浮動小数点数引数を引数として関数を呼び出します | *) |
| |
Set_float of |
(* | リファレンスの値を浮動小数点数引数の値に設定します | *) |
| |
Tuple of |
(* | spec list に従って複数の引数を取ります | *) |
| |
Symbol of |
(* | シンボルのうちいずれかを引数として取り、それを引数として関数を呼び出します | *) |
| |
Rest of |
(* | キーワードの解釈を停止し、残りの引数各々を引数として関数を呼び出します | *) |
typekey =
string
typedoc =
string
typeusage_msg =
string
typeanon_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
は無名引数に対して呼び出されます。
spec
と anon_fun
で指定された関数は対応する引数がコマンドラインに現れた順に呼び出されます。
エラーが起こった場合には Arg.parse
は以下のエラーメッセージを表示してプログラムを終了させます。
usage_msg
doc
を続けたもの-
で始まる無名引数を指定したい場合には、 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
がエラーのときに表示するものと同じメッセージです。
speclist
と usage_msg
は Arg.parse
に渡すものと同じです。val align : (key * spec * doc) list -> (key * spec * doc) list
Symbol
引数に対応する doc 文字列は改行したうえで表示するように整形されます。val current : int ref
Sys.argv
中での)位置を表します。
引数を読み飛ばすためにこの値を変更することもできます。
Arg.parse
は呼び出し時の Arg.current
の値が第 0 引数(プログラム名)の位置を表しているものとし、その次の要素から引数の解析を始めます。