アドレスコレクション

アドレスコレクション (address collection) は、プログラムの各所に分散して記述された値を集めたコレクションを得る言語機能である。ただし、アドレスコレクションは単一の言語機能ではなく、構文抽出器の糖衣構文と、インタープリターの引数解決ディレクティブの組み合わせで提供される。

引数解決の過程で、演算指定子が collectmain 有名ベクトルであり、他に優先順位が高い要因がなければ、アドレスコレクションが開始される。アドレスコレクションの過程では、引数が同じで、演算指定子を collectmain + defaultmain に置き換えた統合演算式を評価し、アドレスコレクションの初期値を得る。続いて、プログラムに記述されているすべての emit 構文抽出器ディレクティブと unemit 構文抽出器ディレクティブが実行される。

emit および unemit 構文抽出器ディレクティブは if, value, group 引数を取る。if 引数と value 引数は必須、group 引数は省略可能である。group 引数を省略すると、mainmain 有名ベクトルが使われる。group 引数は、その emit および unemit 構文抽出器ディレクティブが所属するグループを指定する。

emit および unemit 構文抽出器ディレクティブが実行されるとき、まず group 引数が計算される。引数解決ディレクティブのヒエラルキーにより有効と判断されれば、if 引数が計算される。続いて、if 引数の値が真ならば、value 引数が計算される。アドレスコレクションの初期値と、value 引数の計算まで到達したすべての emit 構文抽出器ディレクティブの value 引数の値を、結合演算子で結合した値が、アドレスコレクションの結果となる。ただし、value 引数の計算まで到達した unemit 構文抽出器ディレクティブは、自分自身よりも前方に記述されている emit 構文抽出器ディレクティブによって追加された値を、アドレスコレクションの結果から取り除く。

emit および unemit 構文抽出器ディレクティブは、引数解決ディレクティブのヒエラルキーの影響を受ける。ここで、2 個の emit または unemit 構文抽出器ディレクティブを考え、記号 AB で表す。また、引数解決ディレクティブを C とする。C の引数を計算する過程では、CA よりも高位であるとき、またそのときに限って、A が有効になる。また、Aif 引数を計算する過程では、AB または C よりも高位であるとき、またそのときに限って、B または C が有効になる。

emit および unemit 構文抽出器ディレクティブの value 引数は、引数解決ディレクティブのヒエラルキーに対して中立である。また、group 引数を計算する過程では、引数解決ディレクティブと emit および unemit 構文抽出器ディレクティブは無効である。