訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
【構文】 TryStatement : try Block Catch try Block Finally try Block Catch Finally Catch : catch ( Identifier ) Block Finally : finally Block
try 文は、 ランタイムエラー(実行時エラー)や throw 文のように現れる例外的な条件についてコードのブロックで括ります。 catch 句は、例外操作(exception-handling)コードを提供します。 catch 句が、例外を捕捉した場合、その識別子は、例外にバインド(連結・結合)されます。
【セマンティックス】 プロダクション
TryStatement : try Block Catch
は、次のように評価されます。
1. B は、Blockを評価した結果とする 2. B.type が、throwではない場合、Bを返す 3.パラメータ B.value を伴う Catch を評価した結果を返す
プロダクション
TryStatement : try Block Finally
は、次のように評価されます。
1. B は、Blockを評価した結果とする 2. F は、Finallyを評価した結果とする 3. F.type が、normalである場合、 Bを返す 4. F を返す
プロダクション
TryStatement : try Block Catch Finally
は、次のように評価されます。
1. B は、Blockを評価した結果とする 2. B.type が、 throwである場合、 a. C は、パラメータ B.valueを伴う Catch を評価した結果とする 3.それ以外の場合、 B.type が、throwではない場合、 a. C は、 Bとする 4. F は、Finallyを評価した結果とする 5. F.type が、normalである場合、Cを返す 6. F を返す
プロダクション
Catch : catch ( Identifier ) Block
は、次のように評価されます。
1. C は、このプロダクションに解釈されるパラメータとする 2. oldEnv は、実行中の実行コンテキストのLexicalEnvironmentとする 3. catchEnv は、引数として oldEnv を渡すことによってNewDeclarativeEnvironmentを呼んだ結果とする 4.引数として識別子のString値を渡すことによって catchEnv の具体的なメソッドCreateMutableBindingを呼ぶ 5.引数として識別子、C、falseを渡すことによって catchEnv の具体的なメソッドSetMutableBindingを呼ぶ、注釈としては、最後の引数は、このような状況下では、さして重要ではない 6.実行中の実行コンテキストのLexicalEnvironmentをcatchEnvに設定 7. B は、Blockを評価した結果とする 8.実行中の実行コンテキストのLexicalEnvironmentをoldEnvに設定 9. B を返す
[注釈] 操作が、どれほどBlockを残したとしてもLexicalEnvironmentは、常に元の状態に復元されます。 プロダクション
Finally : finally Block
は、次のように評価されます。
1.Blockを評価した結果を返す
Catch を伴うTryStatementがstrict(厳格)コード内で現れたり、 Catch プロダクションの識別子が、"eval" または、 "arguments"の何れかである場合には、SyntaxErrorです。