Changes between Initial Version and Version 1 of CDLref_cell


Ignore:
Timestamp:
Jan 16, 2016, 10:00:14 PM (8 years ago)
Author:
okuma-top
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CDLref_cell

    v1 v1  
     1== 組上げ記述 (セル記述) ==
     2
     3組上げ記述は、セル記述とも呼ばれ、セルを定義するものです。
     4セルとは、セルタイプ記述により定義されたコンポーネントの型に基づいて生成されるコンポーネントのインスタンスです。
     5
     6【記述例】
     7
     8{{{
     9[generate(CellPlugin, "option")]  // セルの指定子
     10cell tCelltype SimpleCell {       // cell キーワード, セルタイプ名、セル名
     11   cCall = SampleCell.eEntry;     // 呼び口を受け口に結合
     12   cCallArray[] = Sample0.eEntry; // 呼び口配列を受け口に結合
     13   attribute = 1;                 // 属性の初期値
     14};
     15}}}
     16
     17ここで cell はキーワードであり、tCelltype はセルタイプ名です。'Cell' がセル名です。'{', '}' に囲まれた中に、呼び口の結合、または属性の初期化を記述します。
     18
     19慣習としてセル名は、大文字で始めます。セル名の単語区切りも大文字とします。
     20
     21=== 組上げ記述の指定子 ===
     22
     23==== allocator 指定子 ====
     24
     25allocator 指定子は、セルの属するセルタイプの持つ受け口関数において、send, receive 指定子が指定されている場合に指定する必要があります。
     26ただし、セルの属するセルタイプ、または複合セルタイプにおいて、リレーアロケータ、または内部アロケータが指定されている場合には、指定しません。
     27
     28【記述例】
     29T.B.W
     30
     31==== generate 指定子 ====
     32
     33generate 指定子は、セルプラグインの適用を指示するものです。セルプラグインは、呼び口の結合、属性の初期化や、類似のセルの定義に用いられます。
     34
     35==== id 指定子 ====
     36
     37id 指定子は、セルの id 番号を指定するものです。
     38id 指定子は、id 番号を引数にとります 。
     39id 番号は、正または負の整数です 。
     40
     41【補足説明】 id(0) や文字列などはエラー
     42
     43id 番号はセルタイプごとに 1 から(生成されるセルの個数)までの番号を指定できます。
     44
     45指定できる id 番号には、以下の制約があります。
     46
     47 * id 番号に範囲外となるものを指定できない
     48 * id 番号が重複することはできない
     49
     50セルにid 指定子が指定されていない場合、出現順に 1 から順に id 番号が与えられます
     51ただし id 指定子で指定されている id 番号は避けられます。
     52
     53TECS ジェネレータは id 番号順に、コードを生成します。
     54セルの生成順序を TECS CDL の出現順序とは別に制御したい場合に用います。
     55
     56【補足説明】tecsgen のオプション -u を指定すると、全体の通し番号となるが、セルタイプごとには連続した値が与えられる。
     57その場合でも id = 1 のセルがセルタイプにおいて最初のセルとなる。
     58tecsgen のオプション -v を指定すると、最終的に与えられた id 番号が表示される 。
     59
     60【記述例】
     61{{{
     62  [id(-1)]               // 一番後ろの ID となる (5)
     63  cell tCelltype Cell5{
     64  };
     65 
     66  cell tCelltype Cell2{  // 未指定 id = 2 となる
     67  };
     68
     69  cell tCelltype Cell3{  // 未指定 id = 3 となる(出現順)
     70  };
     71
     72  [id(-2)]               // 後ろから2番目の ID となる(4)
     73  cell tCelltype Cell4{
     74  };
     75
     76  [id(1)]                // 一番先頭の ID となる (1)
     77  cell tCelltype Cell1{
     78  };
     79}}}
     80
     81
     82==== prototype 指定子 ====
     83
     84プロタイプ指定子は、'{', '}' で囲まれた結合リストを伴うセル文が、プロトタイプ宣言であることを示します。
     85
     86prototype 指定子を伴わないセルの定義が CDL ファイル内で表れた時に、実際にセルが定義されます。
     87
     88=== 結合 ===
     89
     90結合とは、セル記述において、呼び口に受け口を割付けることです。
     91呼び口のシグニチャと、受け口のシグニチャは一致しなくてはなりません。
     92
     93結合を記述しようとするセルの属するセルタイプに現れたすべての呼び口について、結合を記述します。
     94ただし、セルタイプの呼び口定義において otpional が指定されている場合には、未結合のままとすることができます。
     95
     96==== 呼び口配列 ====
     97
     98呼び口配列の場合には、結合の左辺において '[', ']' または '[', ']' で囲んで添数を指定します。
     99
     100添数が指定される場合、添数は定数式で、評価の結果0から(配列サイズ−1)までの整数値になる必要があります。
     101セルタイプの呼び口の定義で配列サイズが指定されている場合、
     1020から(配列サイズ−1)までのすべての添数について、結合を記述します。
     103セルタイプの呼び口の定義で配列サイズが指定されていない場合、
     1040から指定された添数の最大値までのすべての配列要素が結合されなくてはなりません。
     105
     106optional 指定されている呼び口の場合には、未結合の添数があってもよいです。
     107添数の出現順序は規定しないが、同じ添数が重複してはなりません。
     108
     109添数が指定されない場合、出現順に0から(出現個数−1)までが添数として与えられます。
     110セルタイプの呼び口の定義で配列サイズが指定されている場合、
     111配列サイズ分の定義をしなくてはなりません。
     112
     113以下の例のように、一つの呼び口配列について、添数を指定する場合と、指定しない場合を混在することはできません。
     114
     115【不適切な記述例】
     116{{{
     117  cCall[0] = Cell.eEnt;
     118  cCall[]  = Cell.eEnt;
     119}}}
     120
     121【補足説明】配列の全体を結合するには、すべての添数について結合を記述する。添数なしの呼び口と受け口を指定して全体を結合する手段はない。
     122
     123==== 受け口配列 ====
     124
     125結合先の受け口が受け口配列の場合、'.' 演算子の右辺に現れる受け口名の後ろに '[', ']' で囲んだ添数を置きます。
     126添数は整数の定数式で、0から(受け口配列の大きさ−1)までの値です。
     127定数式には、定数定義文で定義された定数の識別子を含めることができます
     128
     129添数を省略することができます。この場合、出現順に受け口配列の添数が与えられます。
     130
     131==== 逆結合 ====
     132
     133逆結合は、セルの受け口から、結合される呼び口を指定するものです。
     134以下の場合に限って用いることができます。
     135
     136 * 指定プロトタイプ宣言の場合
     137 * コールバック指定されたシグニチャに対応づいた受け口の場合
     138
     139指定プロトタイプ宣言の場合の例を示します。
     140
     141【記述例】
     142{{{
     143[prototype]                // prototype 指定子
     144cell tMain Main {
     145  eBody <= Task.cBody;     // 逆結合 (受け口に呼び口を結合させます)
     146};
     147}}}
     148
     149コールバック指定されたシグニチャに対応づいた受け口においても、逆結合の書き方は同様です。
     150
     151【補足説明】セルの実装では、呼び口において受け口へたどる情報を持つ(受け口から呼び口へたどるための情報は持っていない)ことから、呼び元のセルから結合先を指定するのを一般的な記述方法としている。従って、逆結合の使用は最小限にとどめるべきであることから、上記の制限が設けられている。
     152
     153=== 結合の指定子 ===
     154
     155==== through 指定子 ====
     156
     157スルー指定子は、呼び口にスループラグインの適用を指示します
     158プラグイン名で指定されたプラグインが ジェネレータにロードされ、ジェネレータがスルーセルを生成します。
     159スルーセルと呼ばれるセルが、呼び口と受け口の間に挿入されます。
     160
     161=== 属性の初期化 ===
     162
     163結合により、セルの属するセルタイプで定義されている属性について、初期値を与えることができます。
     164結合により属性の初期値が与えられない場合、セルタイプにおいて属性に与えられた初期値により初期化されます。
     165いずれにおいても属性の初期値が与えられない場合は、誤りです。
     166
     167初期化子に現れる定数式には、定数定義文で定義された定数の識別子を含めることができます。
     168
     169属性が整数型、浮動小数型、ブール型の場合、初期化子は定数式です。
     170
     171属性がポインタ型で size_is 指定された配列の場合、初期化子は集成型初期化子とします。
     172非配列の場合、初期化子はポインタ型にキャストされた定数式です。
     173
     174属性が構造体型の場合、初期化子は集成型初期化子です。
     175
     176==== 複合コンポーネントの内部セルの属性 ====
     177
     178結合が、複合セルタイプの内部セルの内側に現れた場合は、内部セルの属性を初期化するか、内部セルの属性を複合コンポーネントの属性に割付けるものになります。
     179
     180内部セルの属性を初期化する場合は、前節の属性の初期化の場合と同じです。
     181
     182内部セルの属性を複合コンポーネントの属性に割付ける場合、結合の割付記号 '=' の右辺の記号 '.' の左辺に 'composite' を置くことができます。
     183この場合、記号 '.' の右辺の識別子は、複合セルタイプ属性文で定義される複合セルタイプが外部に公開する属性の名前です。
     184複合セルタイプの属性名が、内部セルの持つ属性、変数、呼び口、受け口のいずれの名前とも重複しない場合には、'compsote' '.' を前置きすることなく、割付け記号 '=' の右辺に複合セルタイプの属性名のみを置くことができます。
     185
     186【記述例】
     187        cell tCell2_active_single cell2 {
     188                a = composite.a;
     189                cCall = cell1.eEntry;
     190        };
     191
     192
     193内部セルの属性を複合コンポーネントの属性に割付ける場合、両者の型が一致しなくてはならなりません。
     194また、内部セルの属するセルタイプにおいて属性の初期値が指定されていたとしても、この初期値は参照されません。
     195複合セルタイプの属性または、複合セルタイプから生成されるセル(複合セルタイプに属するセル)のいずれか、少なくとも一方において、初期値が指定されなくてはなりません。
     196両方で指定された場合、セルで指定された初期値が優先されます。
     197
     198=== プロトタイプ宣言 ===
     199
     200セルのプロトタイプ宣言は、セルが定義される前に参照可能とするために、セルの名前と属するセルタイプまたは複合セルタイプを宣言するものです。
     201あるいは、セルを定義する前に、セルの一部または全部の属性、結合先、非結合先を指定する目的で用いることもできます。
     202
     203プロトタイプ宣言には、純粋プロトタイプ宣言と指定プロトタイプ宣言の2通りがあります。
     204
     205==== 純粋プロトタイプ宣言 ====
     206
     207純粋プロトタイプ宣言は、セルを前方参照可能とする目的で用いられます。
     208
     209TECS CDL ではセルの前方参照が可能であり、通常純粋プロトタイプ宣言を用いる必要はありませんが、意味解析後に生成され解釈されるポストコードで生成されるセルは、意味解析段階で参照できないため、プロトタイプ宣言が必要となります
     210
     211【記述例】
     212{{{
     213  cell tCelltype Cell;
     214}}}
     215
     216'{', '}' で囲まれた結合リストを伴わない。
     217
     218==== 指定プロトタイプ宣言 ====
     219
     220指定プロトタイプ宣言は、プロトタイプ宣言で、呼び口や属性の一部または全部のを予め定義しておく目的で用いられます。
     221プロトタイプ宣言されたセルの定義が行われなければ、セルは生成されません 。
     222
     223セルの定義では、プロトタイプ宣言された結合を変更することはできません(二重定義エラーとなる)。
     224プロトタイプ指定子とジェネレート指定子を同時に指定できません。
     225セルの定義が行われた後に、そのセルの指定プロトタイプ宣言を行うことはできません。
     226
     227【補足説明】 ジェネレート指定子は構文解釈時にプラグインを呼び出す。意味定義段階でプラグインを呼び出すと、セル生成が不適切になる可能性がある。
     228
     229prototype を指定された cell は、何度でも同名で定義できます。
     230
     231
     232【記述例】
     233{{{
     234  [prototype]      // prootype 指定子 (一部の結合だけを指定する例)
     235  cell tMotorA MotorA {
     236    eHandler <= GPIO_16bit_0.cIRQ[3];  // 逆結合
     237    cGPIO = GPIO_16bit_0.eGPIO[3];     // GPIO_16bit No.0 の bit 3 を要求
     238  };
     239}}}
     240
     241
     242
     243------
     244[TECS リファレンスマニュアル [wiki:  トップページ]]・
     245[TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]]
     246