Changes between Initial Version and Version 1 of CDLref_expression


Ignore:
Timestamp:
Jan 16, 2016, 9:54:31 PM (8 years ago)
Author:
okuma-top
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CDLref_expression

    v1 v1  
     1== 式 ==
     2
     3TECS CDL で記述された式は、コンポーネント記述が解釈されるときに評価されます。
     4
     5式を評価するのは、以下の場合です。
     6
     7 * 初期化子
     8 * 呼び口配列、受け口配列の添数
     9 * 指定子 (size_is, count_is, string, id) の引数
     10
     11関数引き数や構造体メンバの size_is, count_is, string で他のパラメータを参照している場合、定数として値が求まらないものについては、型の導出のみを行います。
     12
     13以下の表は、式を構成する部分式と演算内容についてまとめたものです。
     14上から順に優先度の高い演算となります。
     15
     16{{{#!th
     17 種類
     18}}}
     19{{{#!th
     20 構成
     21}}}
     22{{{#!th
     23 内容
     24}}}
     25|----------------
     26{{{#!td rowspan=11
     27 基本式
     28}}}
     29|----------------
     30||  識別子 || 定数、属性、関数の引数の参照    ||
     31|----------------
     32||  'true' || ブール型の真       ||
     33|----------------
     34||  'false' || ブール型の偽       ||
     35|----------------
     36||  整数リテラル || 整数値      ||
     37|----------------
     38||  浮動小数リテラル || 実数値      ||
     39|----------------
     40||  8進数リテラル || 8進整数値      ||
     41|----------------
     42||  16進数リテラル || 16進整数値       ||
     43|----------------
     44||  文字リテラル || 文字列       ||
     45|----------------
     46||  文字列リテラルリスト || 文字列 (分割記述)     ||
     47|----------------
     48||  '(' 式 ')' || 式      ||
     49|----------------
     50{{{#!td rowspan=5
     51 後置式
     52}}}
     53|----------------
     54||  基本式 || 基本式  ||
     55|----------------
     56||  後置式 '![' 式 ']' || 配列参照 ||
     57|----------------
     58||  後置式 '.' 識別子 || 構造体メンバ参照 ||
     59|----------------
     60||  後置式 '->' 識別子 || 構造体メンバ参照(ポインタの場合) ||
     61|----------------
     62{{{#!td rowspan=10
     63 単項式
     64}}}
     65|----------------
     66||  後置式 || 後置式       ||
     67|----------------
     68||  '&' キャスト式 || 変数のアドレス ||
     69|----------------
     70||  '*' キャスト式 || ポインタの間接参照 ||
     71|----------------
     72||  '+' キャスト式 || オペランドの値 ||
     73|----------------
     74||  '-' キャスト式 || オペランドの符号反転 ||
     75|----------------
     76||  '~' キャスト式 || オペランドのビット単位の補数 ||
     77|----------------
     78||  '!' キャスト式 || オペランドの論理否定 ||
     79|----------------
     80|| 'sizeof' 単項式  || オペランドのバイト数 ||
     81|----------------
     82|| 'sizeof' '(' 型名 ')' || オペランドのバイト数 ||
     83|----------------
     84{{{#!td rowspan=3
     85 キャスト式
     86}}}
     87|----------------
     88|| 単項式  || 単項式       ||
     89|----------------
     90|| '(' 型名 ')' キャスト式 || オペランドの型変換 ||
     91|----------------
     92{{{#!td rowspan=5
     93 乗除式
     94}}}
     95|----------------
     96|| キャスト式 || キャスト式       ||
     97|----------------
     98|| 乗除式 '*' キャスト式 || 乗算 ||
     99|----------------
     100|| 乗除式 '/' キャスト式 || 除算 ||
     101|----------------
     102|| 乗除式 '%' キャスト式 || 剰余 ||
     103|----------------
     104{{{#!td rowspan=4
     105 加減式
     106}}}
     107|----------------
     108|| 乗除式 || 乗除式       ||
     109|----------------
     110|| 加減式 '+' 乗除式 || 加算 ||
     111|----------------
     112|| 加減式 '-' 乗除式 || 減算 ||
     113|----------------
     114{{{#!td rowspan=4
     115 シフト式
     116}}}
     117|----------------
     118|| 加減式 || 加減式       ||
     119|----------------
     120|| シフト式 '<<' 加減式 || ビット左シフト ||
     121|----------------
     122|| シフト式 '>>' 加減式 || ビット右シフト ||
     123|----------------
     124{{{#!td rowspan=6
     125 関係式
     126}}}
     127|----------------
     128|| シフト式 || シフト式       ||
     129|----------------
     130|| 関係式 '<' シフト式 || 比較(右辺が大きければ真) ||
     131|----------------
     132|| 関係式 '>' シフト式 || 比較(左辺が大きければ真) ||
     133|----------------
     134|| 関係式 '<=' シフト式 || 比較(右辺が大きいか等しければ真) ||
     135|----------------
     136|| 関係式 '>=' シフト式 || 比較(左辺が大きいか等しければ真) ||
     137|----------------
     138{{{#!td rowspan=4
     139 等価式
     140}}}
     141|----------------
     142|| 関係式 || 関係式       ||
     143|----------------
     144|| 等価式 '==' 関係式 || 比較(等しければ真) ||
     145|----------------
     146|| 等価式 '!=' 関係式 || 比較(等しくなければ真) ||
     147|----------------
     148{{{#!td rowspan=3
     149 and式
     150}}}
     151|----------------
     152|| 等価式 || 等価式       ||
     153|----------------
     154|| and式 '&' 等価式 || ビット単位の論理積 ||
     155|----------------
     156{{{#!td rowspan=3
     157 exor式
     158}}}
     159|----------------
     160|| and式  || and式       ||
     161|----------------
     162|| exor式 '^' and式  || ビット単位の排他的論理和 ||
     163|----------------
     164{{{#!td rowspan=3
     165 or式
     166}}}
     167|----------------
     168|| exor式 || exor式       ||
     169|----------------
     170|| or式   '|' exor式 || ビット単位の論理和 ||
     171|----------------
     172{{{#!td rowspan=3
     173 論理AND式
     174}}}
     175|----------------
     176|| or式  || or式       ||
     177|----------------
     178|| 論理AND式 '&&' or式 || 論理積 ||
     179|----------------
     180{{{#!td rowspan=3
     181 論理OR式
     182}}}
     183|----------------
     184|| 論理AND式 || 論理AND式       ||
     185|----------------
     186|| 論理OR式 '!||' 論理AND式 || 論理和 ||
     187|----------------
     188{{{#!td rowspan=3
     189 条件式
     190}}}
     191|----------------
     192|| 論理OR式 || 論理OR式       ||
     193|----------------
     194|| 論理OR式 '?' 式 ':' 条件式 || 第1オペランドが真なら第2オペランド、偽なら第3オペランド ||
     195|----------------
     196{{{#!td
     197 式
     198}}}
     199|| 条件式 || 条件式       ||
     200|----------------
     201{{{#!td
     202 定数式
     203}}}
     204|| 条件式 || 条件式       ||
     205|----------------
     206
     207=== 基本式における識別子 ===
     208
     209基本式における識別子は、以下のいずれかです。
     210
     211 * 定数定義文により定義された定数
     212 * 式が関数仮引き数の size_is, count_is, string 指定子の引き数として用いられる場合、参照される他の仮引き数
     213 * 式が属性の size_is 指定子の引数として用いられる場合、参照される他の属性
     214 * 式が構造体メンバ変数の size_is, count_is, string 指定子の引数として用いられる場合、参照される他の構造体メンバ変数
     215 * 内部変数の初期化子
     216
     217定数式の一部に C_EXP を用いることはできません。
     218
     219【補足説明】C_EXP は単一の初期化子として用いるものであり、式の一部として用いることはできない。
     220
     221=== 文字列リテラルリスト ===
     222
     223文字列リテラルリストは、1つ以上の文字列を並べたものです。
     224文字列リテラルリストに含まれる文字列は連結されて、一つの文字列リテラルとして扱われます。
     225
     226【制限】整数については、無限精度により評価される。このため無符号整数と有符号整数との演算は、有符号で行われる。
     227
     228【制限】型の格上げは暗黙的に行われるが、格下げは暗黙的に行われない。キャストが必要である。
     229
     230【制限】文字列リテラルは、(char_t *) 以外の型にキャストできない
     231
     232【制限】ブール型は、整数型にキャストしない限り、他の型との演算はできない
     233
     234【制限】 後置式に関数呼び出しと後置インクリメント、デクリメント演算子がない
     235
     236【制限】 前置式に前置インクリメント、デクリメント演算子がない
     237
     238【制限】式にコンマ演算子がない
     239
     240== 初期化子 ==
     241
     242初期化子は、定数式、集成型初期化子リストまたは C_EXP 初期化子です。
     243このいずれを取りうるかは、初期化される変数の型によります。
     244
     245定数式は、整数型、浮動小数型、ブール型、ポインタ型を初期化することができます。ただし、size_is 指定されたポインタ型は定数式では初期化できません。
     246
     247=== 集成型初期化子 ===
     248
     249集成型初期化子は、'{', '}' で囲まれた初期化子リストです。
     250集成型の初期化子は、構造体型、配列型、size_is 指定されたポインタ型を初期化することができます。
     251
     252【参照実装における制限】size_is 指定された構造体へのポインタ型は初期化子を指定できない。結果として var にのみ用いることができる。
     253
     254=== C_EXP 初期化子 ===
     255
     256C_EXP 初期化子は、初期化する変数が集成型(構造体型、配列型)でない場合に、初期化子として指定することができます。
     257
     258C_EXP 初期化子は、文字列リテラルを引数に取ります。
     259引数の文字列リテラルは、ジェネレータの出力の C 言語初期化子として出力されります。
     260ヘッダファイルで define 定義される値を参照するために使用することが意図されています。
     261
     262== プラグイン引数 ==
     263
     264プラグイン引数は、文字列定数です。
     265
     266プラグイン引数は、プラグインモジュールによって解釈されるため各プラグインの仕様に依存しますが、以下の仕様が基本です。
     267
     268  * '=' の左辺にパラメータ名、右辺に文字列を置く
     269  *  左辺のパラメータ名は、識別子である
     270  *  つまりパラメータ名は、先頭文字はアルファベットか '_' で、2文字目以降はアルファベット, '_' または数字である
     271  *  ',' で区切ることにより、複数のパラメータをプラグイン引数として渡すことができる
     272  *  右辺文字列の前後の空白文字は取り除かれる(\" で囲まれている場合を除く)
     273  *  右辺文字列中のダブルクォート'"' は、バックスラッシュ'\' で エスケープする必要がある
     274  *  右辺文字列中にカンマ ',' を含む場合には、右辺文字列全体を '\"' で囲む必要がある
     275  *  右辺文字列中にダブルクォート'"' とカンマ ',' を含む場合には、右辺文字列全体を '\"' で囲む必要がある
     276  *  さらに右辺文字列中のダブルクォート'"'にカンマ ',' が続く場合は、カンマ ',' もバックスラッシュ '\' でエスケープする必要がある
     277
     278【記述例】
     279{{{
     280 "param0 = val str"                 … '=' の左辺にパラメータ名、右辺に値の文字列
     281 "param1 = val str, param2 = val str2"   … ',' で連結
     282 "param3 = \"val str, val str2\""   … 右辺文字列が ',' を含む場合 \" で囲む
     283 "param4 = C_EXP( \"MAIN_PRIORITY\" )"   … 右辺文字列が '"' を含む場合
     284 "param5 = \" \"\,\" \""            … 右辺文字列が ',' と '"' を含む場合 '","' と解釈
     285}}}
     286
     287
     288------
     289[TECS リファレンスマニュアル [wiki:  トップページ]]・
     290[TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]]