次の方法で共有


Production テンプレート ディレクティブ

*Production テンプレート ディレクティブは、特定のコンストラクト内に出現できるメンバーの有効な組み合わせを指定します。 このディレクティブは、*Type: CONSTRUCT を持つテンプレート内でのみ使用できます。

このディレクティブが存在する場合、production は、production のホスト テンプレートにバインドされているコンストラクトの各インスタンスに対して評価されます。 ホスト テンプレートは、Production ディレクティブを含むテンプレートです。 Production ディレクティブが FALSE と評価された場合、警告メッセージが発行されますが、それ以外の点では処理は影響を受けません。 ホスト テンプレートに Production ディレクティブが含まれている場合、検証は実行されません。

*Production ディレクティブは、ホスト テンプレート コンストラクトのルート レベルに記述します。 ルート レベルに複数の *Production ディレクティブがある場合は、最後に定義されたディレクティブのみが評価されます。 Production ディレクティブを評価した結果はブール値です。

*Production ディレクティブ自体はコンストラクトです。 *Production ディレクティブの子要素は、他の *Production コンストラクトまたは *Member コンストラクト、またはその両方の組み合わせ (子 production とも呼ばれます) です。 *Production ディレクティブ内で名前空間ディレクティブを使用することはできません。

*Production ディレクティブに含まれるそれぞれの子 production も TRUE または FALSE に評価されます。 Production ディレクティブは、最初にそれぞれの子 production を評価することによって評価されます。 外側の親 Production ディレクティブの結果は、それぞれの子 production の結果に対して単純な論理演算を実行することによって取得されます。 適用する論理演算の種類は、*Production ディレクティブの vValue によって指定されます。

*Production ディレクティブの値には、EXACTLY_ONE、SATISFY_ALL、または AT_LEAST_ONE のいずれかのシンボルを指定できます。

次の例は、production ディレクティブを示しています。

*Production: EXACTLY_ONE
{   ... child Productions ... }

production ディレクティブの値は次のアルゴリズムによって定義されます。

  1. production に EXACTLY_ONE が指定されている場合、この production は、1 つの子 production が TRUE に評価され、残りが FALSE に評価された場合に TRUE に評価されます。 それ以外の場合、production は FALSE に評価されます。

  2. production に SATISFY_ALL が指定されている場合、この production は、すべての子 production が TRUE に評価された場合にのみ TRUE に評価されます。 それ以外の場合、production は FALSE に評価されます。

  3. production に AT_LEAST_ONE が指定されている場合、この production は、少なくとも 1 つ以上の子 production が TRUE と評価された場合に TRUE に評価されます。 それ以外の場合、production は FALSE に評価されます。

*Production ディレクティブは任意の深さに入れ子にすることができます。