名前検査器

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

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

register name 名前検査器ディレクティブは main 引数と scope 引数を取る。main 引数は必須であり、複合名リテラルである必要がある。scope 引数は省略可能であり、省略しないならば globalmain 複合名リテラルまたは localmain 複合名リテラルである必要がある。デフォルトは global である。

wild names 名前検査器ディレクティブは main 引数と scope 引数を取る。main 引数は必須であり、複合名リテラルである必要がある。さらに、その固有名は any である必要がある。scope 引数は省略可能であり、省略しないならば globalmain 複合名リテラルまたは localmain 複合名リテラルである必要がある。デフォルトは local である。

検査対象のオブジェクトコードに含まれる複合名のうち、register name 名前検査器ディレクティブで登録されている複合名と、wild names 名前検査器ディレクティブで登録されている姓を持つ複合名は、検査に合格する。そうでない複合名は検査に不合格となる。ただし、名前検査器ディレクティブ自身は検査の対象にならない。検査に不合格となった複合名は、何らかの方法でユーザーに通知される。

名前検査器ディレクティブのスコープがグローバルであるとき、その名前検査器ディレクティブは常に有効である。対照的に、名前検査器ディレクティブのスコープがローカルであるとき、その名前検査器ディレクティブは、コードブロックの内部でのみ有効である。演繹的に、ローカルスコープな名前検査器ディレクティブは、検査対象のオブジェクトコードに記述されたもののみが有効であり、検査リソースに記述されたものは無効である。

実装によっては、姓が binary, decimal, hexadecimal である複合名が、それぞれ 2 進法、10 進法、16 進法の数値として妥当であるかどうか検査する。そうでない実装では、これらの姓を持つ複合名を検査対象としない。