JIS X 3017:2013 プログラム言語Ruby | ページ 15

                                                                                             65
X 3017 : 2013 (ISO/IEC 30170 : 2012)
a) 《多対一代入文》は,次の手順で評価する。
1) 《多重代入右辺》を基に,値のリストLを次のとおり作成する。
i) 《演算子式リスト》が存在する場合,プログラムテキストに現れる順に,その《演算子式》を評価す
る。これらの評価結果の値を評価した順に含むリストを,L1とする。
ii) 《演算子式リスト》が存在しない場合,空の値のリストL1を作成する。
iii) 《散開右辺》が存在する場合,11.3.2で規定するとおりに,《散開実引数》から値のリストを作成し,
L2をそのリストとする。
iv) 《散開右辺》が存在しない場合,空の値のリストL2を作成する。
v) 1とL2とを連結したリストを処理結果とする。
2) の長さが0又は1の場合,Aを処理系定義の値とする。
3) の長さが1より大きい場合,Arrayクラスの直接のインスタンスを作成し,Lの要素を,同じ順
序でそこに保存する。AをこのArrayクラスのインスタンスとする。
4) その《変数》が《左辺》であって,かつ,その《演算子式》の値がAであるような《単一変数代入式》
(11.4.2.2.2参照)を評価する。
5) 《多対一代入文》の値は,Aとする。
b) 《一対一括代入文》は,次の手順で評価する。
1) 《括弧なしメソッド呼出し》又は《演算子式》を評価する。Vを評価結果の値とする。
2) がArrayクラスのインスタンスの場合,新しく作ったArrayクラスの直接のインスタンスをA
とする。AはVだけを要素としてもつか,又はVの全ての要素をV内と同順にもつとする。どちら
を選ぶかは処理系定義とする。
3) がArrayクラスのインスタンスではない場合,Vを唯一の要素とするArrayクラスの直接のイ
ンスタンスAを作る。
4) 《一括左辺》の《左辺》が存在する場合,その《変数》がこの《左辺》であって,かつ,その《演算子式》の
値がAであるような《単一変数代入式》(11.4.2.2.2参照)を評価する。そうではない場合,この手順
を飛ばす。
5) 《一対一括代入文》の値は,Aとする。
c) 《多対多代入文》は,次の手順で評価する。
1) 《多重代入右辺》が存在する場合,それを基に値のリストを作成し[a) 1)参照],Rをそのリストとす
る。
2) 《多重代入右辺》が存在しない場合,次の手順を行う。
i) 《括弧なしメソッド呼出し》又は《演算子式》を評価する。Vを評価結果の値とする。
ii) がArrayクラスのインスタンスでない場合の動作は未規定とする。
iii) の全ての要素を同順に含む実引数リストRを作る。
3) ) 空の変数リストLを作成する。
ii) プログラムテキストに現れる順に,それぞれの《多重代入左辺項目》の《左辺》又は《グループ化され
た左辺》を,Lの末尾に追加する。
iii) 《多重代入左辺》の《一括左辺》が存在する場合,それをLの末尾に追加する。
iv) 《多重代入左辺》が《グループ化された左辺》の場合,その《グループ化された左辺》をLの末尾に追
加する。
4) のそれぞれの要素Liについて,L内と同順に,次の手順を行う。

――――― [JIS X 3017 pdf 71] ―――――

66
X 3017 : 2013 (ISO/IEC 30170 : 2012)
i) iをLiのL内における添字とする。NRをRの要素数とする。
ii) iが《左辺》の場合,次の手順を行う。
I) がNRよりも大きい場合,Vをnilとする。
II) そうではない場合,VをRのi番目の要素とする。
III) i “=” Vという形式の《単一変数代入》を評価する。
iii) iが《一括左辺》であって,かつ,その《左辺》が存在する場合,次の手順を行う。
I) がNRよりも大きい場合,Arrayクラスの空の直接のインスタンスを作成し,それをAとする。
II) そうではない場合,Rの要素のうち,添字がi以上であるものを同じ順序で含むArrayクラス
の直接のインスタンスを作成し,それをAとする。
III) その《変数》が《左辺》であって,かつ,その《演算子式》の値がAであるような《単一変数代入式》
(11.4.2.2.2参照)を評価する。
iv) iが《グループ化された左辺》の場合,次の手順を行う。
I) がNRよりも大きい場合,Vをnilとする。
II) そうではない場合,VをRのi番目の要素とする。
III) その《多重代入左辺》が《グループ化された左辺》の《多重代入左辺》であって,かつ,その《多重代
入右辺》がVであるような《多対多代入文》を評価する。
11.4.2.5 rescue修飾子付き代入
構文規則
《rescue修飾子付き代入》 ::
《左辺》 [《行終端子》禁止] “=” 《演算子式》1 [《行終端子》禁止] “rescue” 《演算子式》2
意味規則
《rescue修飾子付き代入》は,次の手順で評価する。
a) 《演算子式》1を評価する。Vを評価結果の値とする。
b) この《演算子式》1の評価中に例外が発生し,処理されず,かつ,その例外がStandardErrorクラス
のインスタンスの場合,《演算子式》2を評価し,Vの値を,評価結果の値に置き換える。
c) その《変数》が《左辺》で,《演算子式》の値がVであるような《単一変数代入式》(11.4.2.2.2参照)を評価
する。評価結果の値を《rescue修飾子付き代入》の値とする。

――――― [JIS X 3017 pdf 72] ―――――

                                                                                             67
X 3017 : 2013 (ISO/IEC 30170 : 2012)

11.4.3 単項演算子式

11.4.3.1 概要
構文規則
《単項演算子式》 ::=
《単項マイナス式》
|《単項式》
《単項マイナス式》 ::
《べき乗式》
|“-” 《べき乗式》
《単項式》 ::
《一次式》
|“~” 《単項式》1
|“+” 《単項式》2
|“!” 《単項式》3
意味規則
《単項演算子式》は,次の手順で評価する。
a) 《べき乗式》という形式の《単項マイナス式》は,11.4.4 e)で規定するとおりに評価する。
b) “-” 《べき乗式》という形式の《単項マイナス式》は,次の手順で評価する。
1) 《べき乗式》を評価する。Xを評価結果の値とする。
2) 空の実引数リストLを作成する。Xに対し,“-@” メソッドを,Lを実引数リストとして呼び出す。
呼出し結果の値を《単項マイナス式》の値とする。
c) “~” 《単項式》1という形式の《単項式》は,次の手順で評価する。
1) 《単項式》1を評価する。Xを評価結果の値とする。
2) 空の実引数リストLを作成する。Xに対し,“~” メソッドを,Lを実引数リストとして呼び出す。
呼出し結果の値を《単項式》の値とする。
d) “+” 《単項式》2という形式の《単項式》は,次の手順で評価する。
1) 《単項式》2を評価する。Xを評価結果の値とする。
2) 空の実引数リストLを作成する。Xに対し “+@” メソッドを,Lを実引数リストとして呼び出す。
呼出し結果の値を《単項式》の値とする。
e) “!” 《単項式》3という形式の《単項式》は,11.2で規定するとおりに評価する。
11.4.3.2 defined・式
構文規則
《defined・式》 ::=
《括弧付きdefined・式》
|《括弧なしdefined・式》
《括弧付きdefined・式》 ::
“defined・” “(” 《式》 “)”
《括弧なしdefined・式》 ::
“defined・” 《演算子式》

――――― [JIS X 3017 pdf 73] ―――――

68
X 3017 : 2013 (ISO/IEC 30170 : 2012)
意味規則
《defined・式》は,次の手順で評価する。
a) を《括弧付きdefined・式》の《式》,又は《括弧なしdefined・式》の《演算子式》とする。
b) が《定数識別子》の場合,次の手順を行う。
1) 11.5.4.2で示されている《定数識別子》の評価と同じ評価を行って,名前がEである定数束縛を探す。
ただし,束縛が見つからなかった場合にNameErrorクラスの直接のインスタンスを発生させない。
2) 束縛が見つかった場合,《defined・式》の値は,処理系定義の真とする。
3) そうではない場合,《defined・式》の値はnilとする。
c) が《大域変数識別子》の場合,次の手順を行う。
1) 名前がEである束縛が 大域変数束縛集合 内に存在する場合,《defined・式》の値は処理系定義の真と
する。
2) そうではない場合,《defined・式》の値はnilとする。
d) が《クラス変数識別子》の場合,次の手順を行う。
1) を現在のクラス又はモジュールとする。Cとその全てのスーパークラスとを含む集合を,CSとす
る。CSのそれぞれの要素のインクルードモジュールリストについて,そこに含まれるモジュールを
全て合わせた集合を,MSとする。CS及びMSの和集合を,CMとする。
2) M内のクラス又はモジュールに,そのクラス束縛の集合内に名前がEである束縛をもつものが存
在する場合,《defined・式》の値は処理系定義の真とする。
3) そうではない場合,《defined・式》の値はnilとする。
e) が《インスタンス変数識別子》の場合,次の手順を行う。
1) 名前がEである束縛が,現在のselfのインスタンス変数束縛の集合内に存在する場合,《defined・式》
の値は処理系定義の真とする。
2) そうではない場合,《defined・式》の値はnilとする。
f) が《局所変数識別子》の場合,次の手順を行う。
1) 《局所変数識別子》が局所変数への参照(11.5.4.7.2参照)の場合,《defined・式》の値は処理系定義の
真とする。
2) そうではない場合,現在のクラス又はモジュールを起点として,名前がEであるメソッド束縛を
13.3.4で規定するとおりにして探す。
i) 束縛が見つかり,その値がundef でない場合,《defined・式》の値は処理系定義の真とする。
ii) そうではない場合,《defined・式》の値はnilとする。
g) それ以外の場合,《defined・式》の値は処理系定義とする。

11.4.4 2項演算子式

構文規則
《2項演算子式》 ::=
《等価式》
《等価式》 ::
《関係式》
|《関係式》 [《行終端子》禁止] “<=>” 《関係式》
|《関係式》 [《行終端子》禁止] “==” 《関係式》

――――― [JIS X 3017 pdf 74] ―――――

                                                                                             69
X 3017 : 2013 (ISO/IEC 30170 : 2012)
|《関係式》 [《行終端子》禁止] “===” 《関係式》
|《関係式》 [《行終端子》禁止] “!=” 《関係式》
|《関係式》 [《行終端子》禁止] “=~” 《関係式》
|《関係式》 [《行終端子》禁止] “!~” 《関係式》
《関係式》 ::
《ビット単位OR式》
|《関係式》 [《行終端子》禁止] “>” 《ビット単位OR式》
|《関係式》 [《行終端子》禁止] “>=” 《ビット単位OR式》
|《関係式》 [《行終端子》禁止] “<” 《ビット単位OR式》
|《関係式》 [《行終端子》禁止] “<=” 《ビット単位OR式》
《ビット単位OR式》 ::
《ビット単位AND式》
|《ビット単位OR式》 [《行終端子》禁止] “|” 《ビット単位AND式》
|《ビット単位OR式》 [《行終端子》禁止] “^” 《ビット単位AND式》
《ビット単位AND式》 ::
《ビット単位シフト式》
|《ビット単位AND式》 [《行終端子》禁止] “&” 《ビット単位シフト式》
《ビット単位シフト式》 ::
《加減式》
|《ビット単位シフト式》 [《行終端子》禁止] “<<” 《加減式》
|《ビット単位シフト式》 [《行終端子》禁止] “>>” 《加減式》
《加減式》 ::
《乗除式》
|《加減式》 [《行終端子》禁止] “+” 《乗除式》
|《加減式》 [《行終端子》禁止] “-” 《乗除式》
《乗除式》 ::
《単項マイナス式》
|《乗除式》 [《行終端子》禁止] “*” 《単項マイナス式》
|《乗除式》 [《行終端子》禁止] “/” 《単項マイナス式》
|《乗除式》 [《行終端子》禁止] “%” 《単項マイナス式》
《べき乗式》 ::
《単項式》
|《単項式》 [《行終端子》禁止] “**” 《べき乗式》
《2項演算子》 ::=
“<=>”|“==”|“!=”|“===”|“=~”|“!~”|“>”|“>=”|“<”|“<=”
|“|”|“^”|“&”|“<<”|“>>”|“+”|“-”|“*”|“/”|“%”|“**”
次のいずれかの演算子の直前に《空白類》がある場合,その演算子の直後にも一つ以上の《空白類》がなけ
ればならない。
− 《ビット単位AND式》の “&”

――――― [JIS X 3017 pdf 75] ―――――

次のページ PDF 76

JIS X 3017:2013の引用国際規格 ISO 一覧

  • ISO/IEC 30170:2012(IDT)

JIS X 3017:2013の国際規格 ICS 分類一覧