この章では、スクリプトを構成する文 (ステートメント) について定義する。
Statements: Statement* の実行は次のように行う:
Void.void
]] を返す。Statement の実行は、それを構成する一つの文 s を実行し、その結果を返す。Statement の実行において名前が与えられている場合は、 s を実行する際にも同じ名前を与える。
InnerStatement の実行は、それを構成する Block または Statement を実行し、その結果を返す。InnerStatement の実行において 名前が与えられている場合は、Block または Statement を実行する際にも同じ名前を与える。
一部の例外を除いて、#Script の全ての文およびコマンドは EOS で終わる。EOS は原則として一つのセミコロントークンで構成されるが、次の場合には これを省略できる:
}
が続くときブロックは複数の文をまとめて一つの文として扱うことができるように するものである。
Block: LeftBrace Statements RightBrace の実行は、Statements を実行し、その結果を返す。
;
D空文は何の処理も行わない文である。
EmptyStatement: Semicolon の実行結果は、[[初期の Void.void
]] である。
@label
KDラベル文は、文に名前を与えるものである。 名前は、反復文の実行に影響する。
LabeledStatement: LabelKeyword Identifier Colon InnerStatement の実行は次のように行う:
Void.void
]] を返す。名前を与えて文を実行することは、特に明示しない限り、 通常の方法で文を実行することと同じである。 一部の文は、名前を与えて実行した際に通常とは異なる振る舞いをする。
一つの文に与えることの出来る名前は一つまでである。 ラベル文を入れ子にすることは可能であるが、 最も内側のラベル文で指定された名前のみが文に与えられる。
ラベルの識別子は変数のスコープとは無関係なため、 複数のラベル文で同じ名前を指定することは可能であるが、避けるのが望ましい。
式文は、一つの式によって構成される文である。
ExpressionStatement: Expression EOS の実行は、Expression を評価し、その結果に対して get-reference-value を実行し、その結果を返す。
@var
KD変数宣言文は、現在の変数領域に変数を定義するための文である。
VariableStatement: VarKeyword Variables EOS の実行は、Variables を実行し、その結果に対して get-reference-value を実行し、その結果を返す。
Variables: Variable (Comma Variable)* の実行は次のように行う:
Variable: VariableInit の実行は、VariableInit を実行し、その結果を返す。
Variable: VariableIdentifier の実行は、VariableIdentifier を実行し、その結果を返す。
VariableInit: (VariableIdentifier Equal)+ Condition の実行は次のように行う:
VariableIdentifier: Identifier の実行は次のように行う:
Void.void
を値としてそのメンバを作成する。既にメンバが存在するならば、何もしない。最も簡単な変数宣言文の例である:
@var a;
変数をカンマで区切ることで、複数の変数を宣言できる:
@var a, b, c;
変数を宣言すると同時に初期値を代入できる:
@var a = 1, b = 2, c = 3;
複数の変数を同じ値で初期化するには、変数を等号でつなげて書くことができる:
@var a = b = c = 0;
変数を初期化しない場合、その変数は
Void.void
で初期化される。
既に存在している変数に対して変数宣言文を実行した場合、等号による代入が
あれば改めて新たな値が代入されるが、変数名が書かれているだけの場合は
何も起こらない。
ECMAScript とは異なり、変数は実行コンテクストが作成されるときではなく 変数宣言文が実行されるときに作成される。
@print
KD@printline
KD@p
KD@pl
KDPrint 文は、文字列データを出力する。 文字列データを出力することの具体的な処理内容は、実行環境に依存する。
PrintStatement: PrintKeyword Expression? EOS の実行は次のように行う:
@printline
または @pl
が含まれるならば、実行環境の定める方法により改行を出力する。Void.void
]]
を返す。@p
と @pl
はそれぞれ
@print
と @printline
の略記である。
@if
KD@elseif
KD@elsif
KD@elif
KD@else
KDIf 文は、条件式を評価し、それが真ならばその直後の文を、偽ならば else 節の文を (それがある場合)、実行する。
IfStatement の実行は、次のように行う:
TrailingElse の実行は、次のように行う:
Void.void
]]
を返す。構文規則により、Else または ElseIf は それが対応し得る if 文のうち最も近いものに対応する。
以下は、if 文の例である:
@if value < min: {
@return min;
} @elseif value > max: {
@return max;
} @else: {
@return value;
}
@else
キーワードの直後にもコロンが必要である。
@while
KDWhile 文は条件が真の間、文の実行を繰り返す。 条件が初めから偽ならば、文は一度も実行されない。
WhileStatement の実行は、次のように行う:
Void.void
]] を返す。以下は while 文の例である:
@while !ready:
wait[];
While 文にも if 文同様に else 節を付けることが出来る。While 文のループ条件が成り立たなくなると、else 節が実行される。しかし break 文でループから脱出する場合には、else 節は実行されない。
@do
KDDo-while 文は条件が真の間、文の実行を繰り返す。 条件が評価される前に文が一度実行される。
DoWhileStatement の実行は、次のように行う:
Void.void
]] を返す。Void.void
]]
を返す。以下は do-while 文の例である:
@do {
try[];
} @while !success;
Do-while 文には else 節は付けられない。
@for
KD@in
KDin
KDFor 文は、指定された列挙オブジェクトが列挙する各オブジェクトに対して反復処理を行う。
ForStatement の実行は、次のように行う:
E.toNext[]
を評価し、その結果に対して
get-reference-value
を行い、その結果を改めて
e とする。ただし、この評価において部分式 E の評価結果は
e であるとする。@var
I = E.item;
を評価し、その結果を v
とする。この ForStatement に VarKeyword が含まれていなければ、式文
I = E.item;
を評価し、その結果を v
とする。ただし、この評価において部分式 I はこの ForStatement の
Identifier とし、部分式 E の評価結果は e
であるとする。E.toNext[]
の評価
(*1) に戻る。Void.void
]] を返す。E.toNext[]
の評価 (*1) に戻る:
以下は for 文の例である:
@var sum = 0;
@for @var i: 1 ~ 10: {
sum += i;
}
このコードは、以下のコードと同等の動作をする:
@var sum = 0;
@var e = 1 ~ 10;
@while e = e.toNext[]: {
i = e.item;
sum += i;
}
ただし、変数 e は架空の変数である。
@break
KDIdentifier の無い BreakStatement の実行は、0 文字の Unicode 文字列 を移動先とする break 終了の結果を返す。
Identifier を含む BreakStatement の実行は、Identifier トークンを構成する Unicode 文字列を移動先とする break 終了の結果を返す。
@continue
KDIdentifier の無い ContinueStatement の実行は、0 文字の Unicode 文字列 を移動先とする continue 終了の結果を返す。
Identifier を含む ContinueStatement の実行は、Identifier トークンを構成する Unicode 文字列を移動先とする continue 終了の結果を返す。
@return
KD復帰文は関数の実行を終了する。
ReturnStatement: ReturnKeyword EOS の実行は、
[[復帰: 初期の Void.void
]]
を返す。
ReturnStatement: ReturnKeyword Expression EOS の実行は次のように行う:
@throw
KD投擲文は、エラー終了の結果を発生する。
ThrowStatement: ThrowStatement Expression EOS の実行は次のように行う:
@try
KD@catch
KD@finally
KDTry 文は、実行中に発生したエラーに対する処理を行う。
TryStatement の実行は、次のように行う:
@var
I = E;
を評価し、その結果を改めて r
とする。この ForStatement に VarKeyword が含まれていなければ、式文
I = E;
を評価し、その結果を改めて
r とする。ただし、この評価において部分式 I はこの Catch
に含まれる Identifier とし、部分式 E の評価結果は [[a
の値]] であるとする。