ネームスペース

ネームスペースは、一般名前有効範囲を区切り、セルタイプ、シグニチャの名前衝突を防ぐために用いられます。

【記述例】

namespace nNS {
    signature sSig {
       void func( void );
    };
    [active]
    celltype tCelltype {
       entry sSig  eEntry;
    };
};

cell nNS::tCelltype Cell {
};

ここで namespace はキーワードであり、nNS はネームスペース名です。’{‘, ‘}’ に囲まれた中に、シグニチャ (signature)、セルタイプ (celltype) を記述します。

慣習として、ネームスペース名は ‘n’ で始めます。

同じネームスペース名を持つネームスペースを、繰り返し記述することができます。

ネームスペースは、再帰的に設けることができます。

【補足説明】ネームスペースは、セルタイプとシグニチャのみに用いる。セルは、リージョンの下に置く。名前衝突回避とともにセルのレイアウト制御を行う。

【補足説明】以下のものも、ネームスペース下に置くことができない。
  • 構造体 (struct) タグ
  • 型定義 (typedef) された型名
  • 定数 (const)
  • 列挙型 (enum)

これらを TECS CDL でネームスペース下に置くことに技術的困難はないが、C 言語の生成コードにおいて短縮して記述する方法がなく、グローバル名を使用することになり利便性がないため。

ネームスペース識別子

ネームスペース識別子は、ネームスペースに属するシグニチャやセルタイプを、異なるネームスペースから参照する際に用います。 シグニチャ名、セルタイプ名を指定する箇所で、ネームスペース識別子を用いることができます。

リージョンは、ネームスペースと同様に名前有効範囲を区切ります。 従ってセル名を指定する箇所でも、ネームスペース識別子を用いることができます。

【記述例】

nNS::sSig
nNS::tCelltype

ネームスペース識別子は、一般名前有効範囲に属する物を参照するときに使用します。 ネームスペース識別子には、以下の3種類があります。

種類 参照する対象 記述例
単一の識別子 同じネームスペース、または親ネームスペースに存在する物を参照。 同じネームスペースの物が優先されます。親ネームスペースにも存在しない場合、 更にその親ネームスペースを再帰的に探索していき、見つかった物を参照します。 tCelltype sSignature
絶対パス指定 ルートネームスペース (ルートリージョン) から指定して、物を参照。 ::nNS::tCelltype ::rRegion::rSubRegion::Cell
相対パス指定 入れ子の内側のネームスペースに存在する物、または親ネームスペースに存在する物を参照。 ‘::’ で区切られた最初の識別子を名前とするネームスペースが同一ネームスペースになければ、 親ネームペースを再帰的に探索します。 入れ子の内側へ向かって再帰的な探索は行われません。 nNS::sSignature nNS::nSubNS::tCelltype

単一の識別子、および相対パス指定の先頭の識別子と一致するものがネームスペース内にないとき、上位のネームスペースから探索します。