式検査器

式検査器 (expression inspector) は、式の使用が妥当であるかどうか検査するサブシステムである。式検査器は 2 個のオブジェクトコードを入力として受け取る。これらのオブジェクトコードをそれぞれ検査対象と検査リソースと呼ぶ。このうち検査リソースは、プログラムで使用するオブジェクトコードをすべて構文結合器で結合してから入力することを想定している。

式検査器は 2 段階の検査を行う。まず、前段のパターンを用いて、検査対象となる式を抽出する。続いて、検査対象となる式が後段のパターンに合致するかを検査し、合致しなければ何らかの方法でユーザーに通知する。

式検査器にとって特別な意味を持つ文を式検査器ディレクティブという。式検査器ディレクティブは、以下の複合名リテラルを演算指定子とする文である。これらの複合名リテラルの姓はすべて main である。

constraint 式検査器ディレクティブ

constraint 式検査器ディレクティブは pattern 引数と list 引数を取り、いずれの引数も必須である。pattern 引数には式パターンを記述する。list 引数は複合名リテラルである必要がある。

constraint 式検査器ディレクティブのスコープはコードブロックである。式検査器は constraint 式検査器ディレクティブの式パターンに合致する式を、コードブロックの範囲内で検索する。constraint 式検査器ディレクティブは検査対象のオブジェクトコードに記述されたもののみが有効であり、検査リソースに記述されたものは無効である。

式パターンでは、以下の複合名は特別な意味を持つ。これらの複合名リテラルの姓はすべて main である。

any 複合名は任意の式に合致する。

listed 複合名は式パターンにちょうど 1 回だけ記述する必要がある。listed 複合名は任意の式に合致する。listed 複合名に合致する式は検査対象であり、後段の検査に送られる。

式パターンの統合演算式には存在しないが、実際の統合演算式には存在する過剰な引数があっても、式パターンは実際の式に合致する。逆の場合、すなわち、式パターンに存在する引数が実際の式に存在しない場合には、式パターンは実際の式に合致しない。

accept expression 式検査器ディレクティブ

accept expression 式検査器ディレクティブは expression 引数と list 引数を取り、いずれの引数も必須である。expression 引数には任意の式を記述できる。list 引数は複合名リテラルである必要がある。共通の list 引数を持つ accept expression 式検査器ディレクティブ (単数または複数) は式リストを構成する。

accept expression 式検査器ディレクティブのスコープはグローバルである。accept expression 式検査器ディレクティブは、検査対象および検査リソースのオブジェクトコードの、いずれの場所に記述されていても有効である。

前段の検査で listed 複合名に合致した式が、list 引数で指定された式リストのいずれかの式に合致すれば、検査に合格する。前段の検査で listed 複合名に合致した式が、list 引数で指定された式リストのいずれの式にも合致しなければ、検査は不合格となり、何らかの方法でユーザーに通知される。

後段の検査で、accept expression 式検査器ディレクティブの expression 引数と実際の式とは、完全一致で比較される。

constraint 式検査器ディレクティブの追加の動作

constraint 式検査器ディレクティブは relation 引数を取ることができる。この引数は省略されないならば subset, superset, comprehensive のいずれかの複合名リテラルである必要がある。これらの複合名リテラルの姓はすべて main である。デフォルトは subset である。このときの動作はこれまでの節で説明した。

superset を指定した場合は、1 個の constraint 式検査器ディレクティブによって抽出された式 (単数または複数) が、式リストのすべての式を網羅した場合に、検査に合格する。このとき、式リストにない式が抽出されていても合格とする。comprehensive を指定した場合は、1 個の constraint 式検査器ディレクティブによって抽出された式 (単数または複数) が、式リストのすべての式を過不足なく網羅した場合に、検査に合格する。すなわち、comprehensive を指定した constraint 式検査器ディレクティブは、subsetsuperset の両方に合格するとき、かつそのときに限って、検査に合格する。