== ネームスペース== ネームスペースは、一般名前有効範囲を区切り、セルタイプ、シグニチャの名前衝突を防ぐために用いられます。 【記述例】 {{{ 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種類があります。 {{{#!th 種類 }}} ||= 参照する対象 =||= 記述例 =|| |----------------- {{{#!td 単一の識別子 }}} {{{#!td 同じネームスペース、または親ネームスペースに存在する物を参照。 同じネームスペースの物が優先されます。親ネームスペースにも存在しない場合、[[BR]] 更にその親ネームスペースを再帰的に探索していき、見つかった物を参照します。 }}} {{{#!td tCelltype [[BR]] sSignature Cell }}} |----------------- {{{#!td 絶対パス指定 }}} {{{#!td ルートネームスペース (ルートリージョン) から指定して、物を参照。 }}} {{{#!td ::nNS::tCelltype [[BR]] ::rRegion::rSubRegion::Cell }}} |----------------- {{{#!td 相対パス指定 }}} {{{#!td 入れ子の内側のネームスペースに存在する物、または親ネームスペースに存在する物を参照。 '::' で区切られた最初の識別子を名前とするネームスペースが同一ネームスペースになければ、[[BR]] 親ネームペースを再帰的に探索します。 入れ子の内側へ向かって再帰的な探索は行われません。 }}} {{{#!td nNS::sSignature [[BR]] nNS::nSubNS::tCelltype }}} |----------------- 単一の識別子、および相対パス指定の先頭の識別子と一致するものがネームスペース内にないとき、上位のネームスペースから探索します。 ------ [TECS リファレンスマニュアル [wiki: トップページ]]・ [TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]]