| 1 | == 式 == |
| 2 | |
| 3 | TECS 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 | |
| 256 | C_EXP 初期化子は、初期化する変数が集成型(構造体型、配列型)でない場合に、初期化子として指定することができます。 |
| 257 | |
| 258 | C_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 目次]] |