コマンドライン引数により、cduceは対話的なトップレベル、インタプリタ、コンパイラ、またはローダのいずれかとして振舞う。
ycduce [OPTIONS ...] [--arg ARGUMENT ...]このコマンドは対話的なトップレベルとして動作する。下のトップレベルの項を参照のこと。
cduce [OPTIONS ...] [ script.cd | --stdin ] [--arg ARGUMENT ...]
cduce [OPTIONS ...] --script script.cd [ ARGUMENT ...]このコマンドはスクリプトscript.cdを実行する。
cduce [OPTIONS ...] --compile script.cdこのコマンドは
script.cd
をコンパイルし、script.cdo
を作成する。OCaml/CDuceインタフェースが利用可能で有効になっていれば、コンパイラは対応するOCamlインタフェースscript.cmi
を探す。詳しくは、CDuceのOCamlとのインタフェースのページを参照のこと。
cduce [OPTIONS ...] --run [ script.cd ... ] [--arg ARGUMENT ...]このコマンドは一つまたは幾つかのコンパイル済みスクリプトを実行する。
--arg
オプションに続く引数は、スクリプトのコマンドラインである。CDuceの中でargv
演算子(型[] -> [ String* ]
)を使ってアクセスすることができる。
オプションや引数には、次のようなものがある。
--verbose
(--compile
モードのみ)。コンパイルユニットの中での値の型を表示する。--obj-dir ディレクトリ
(--compile
モードのみ)。.cdoファイルを置くべき場所を指定する(デフォルト: ソースファイルと同じ場所)。--I ディレクトリ
。ディレクトリを、.cdo
, .cmi
の検索パスに加え、ファイルをインクルードする。--stdin
。CDuceスクリプトを標準入力から読み込む。--no 機能
。ビルトインのオプション機能の一つを無効にする。機能、及びそのシンボリック名のリストは、-vオプションで得ることができる。たとえば、PXPを使うために、Expatパーサを切ったりするのに、コンパイル時に両方インクルードされてしまうのであれば、用いるとよい。-v
、--version
。バージョン情報と、ビルトインのオプション機能を表示し、終了する。--mlstub
。CDuceのOCamlとのインタフェースを参照のこと。--help
。コマンドラインの使用法の情報を表示する。CDuceはスクリプトを書いて使うことができる。通常、スクリプトを#!install_dir/cduceCDuce
で始め、インタプリタをバッチ形式で呼び出せば十分である。スクリプトを呼び出す際に--arg
が来るのを避けるために、--script
オプションを用いることができる。これは、Evolutionメールクライアントのフィルタのタイトルを全て印字するスクリプトファイルのサンプルである。
#!/bin/env cduce --script type Filter = <filteroptions>[<ruleset> [(<rule>[<title>String _*])+]];; let src : Latin1 = match argv [] with | [ f ] -> f | _ -> raise "Invalid command line" in let filter : Filter = match load_xml src with | x&Filter -> x | _ -> raise "Not a filter document" in print_xml(<filters>([filter]/<ruleset>_/<rule>_/<title>_)) ;;
CDuceのプログラムは、フレーズの列であり、フレーズは、;;
で並べたり、区切ったりすることができる。フレーズには幾つかの種類がある。
type T = t
。隣り合う型宣言は、相互再帰にできる。例えば、
type T = <a>[ S* ] type S = <b>[ T ]
let f ...
。隣り合う関数宣言は、相互再帰にできる。例えば、
type T = <a>[ S* ] type S = <b>[ T ]
let p = e
(式eの結果をパターンpを用いて束縛する)、let p : t = e
(式により緩い型を与える)、let p :? t = %%e$$
(式がある型であるかどうか動的に検査する)include "other_cduce_script.cd"
。インクルードの循環は検知され、自動的に排除される。ファイル名は、カレントファイルのディレクトリ(あるいは、トップレベルではカレントディレクトリ)からの相対となる。using alias = "unit"
又はusing alias = unit
: コンパイル済みユニットに別名を与える。unit.cdo
の値、型、名前空間接頭辞、スキーマが、alias.ident又はunit.identのいずれでも参照できるようになる。open u
。この文により、コンパイルユニットuでエクスポートされた識別子全てをカレントスコープにインポートする。これらの識別子は、さらにカレントユニットで再エクスポートされる。CDuceファイルがコマンドラインで与えられなければ、インタプリタは対話的トップレベルとして振舞う。
トップレベルのフレーズは、各;;
の後で処理される。型又は関数の相互再帰宣言は、一つの隣り合うフレーズ列(間に;;
がない)に含まれなければならない。
トップレベルは、トップレベル命令#quit
だけでなく、Ctrl-CやCtrl-Dでも終了できる。別の選択肢はビルトインのexitを使うことである。
トップレベル命令#help
は、利用可能なトップレベル命令に関するヘルプメッセージを印字する。
トップレベル命令#env
は、現在の環境を表示する。環境とは、グローバル型及び値、さらには、現在時点での、構文分析(ユーザ定義)、及び清書(CDuce算出)に使われる、接頭辞・名前空間束縛である。
二つのトップレベル命令#silent
及び#verbose
は、トップレベルの出力(型及び評価の結果)を抑制したり、促進したりするために使われる。
トップレベル命令#reinit_ns
は、名前空間付きで値や型を清書する際に用いられる接頭辞・名前空間束縛の表を再初期化する(XML名前空間を参照)。
トップレベル命令#print_type
は、CDuce型の式を表示する(XMLスキーマ文書からインポートされた型を含む)。
トップレベル命令#builtins
は、組み込みOCaml値の名前を印字する(CDuceのOCamlとのインタフェースを参照のこと)。
トップレベルには、行編集機能はない。leditのような外部ラッパを用いるとよい。
識別子(変数、型、再帰パターン、…)は、XML名前空間の意味で、修飾された名前である。XML名前空間の章で、CDuceにおいて名前空間接頭辞を定義する方法を説明している。識別子は、XMLの属性として解決される(デフォルトの名前空間が適用されないということを意味する)。全ての識別子は同じスコープにある。例えば、同じ名前を型と変数(又はスキーマ、名前空間接頭辞、外部ユニットに対するエイリアス)で同時に使うことはできない。
識別子中のドットは、ドット記法の曖昧さを避けるため、バックスラッシュで保護されなければならない。
ドット記法は幾つかの目的のためにある。
CDuceは、二つのコメント様式をサポートしている。(* ... *)及び/* ... */である。最初のスタイルは、プログラマがコードの一部を除外することができるようにするためのものである。ネストにすることができ、シングル、又はダブルクォート中の文字列中では、終端の目印*)を探さない。特に、シングルクォート(及びアポストロフィ)は、(* ... *)コメントの中で釣りあわなければならない。別のスタイル/* ... */はテキストのコメントに適している。ネストにできず、クォートをコメント内で特別に扱ったりはしない。