JIS X 3003:1993 電子計算機プログラム言語Full BASIC | ページ 24

112
X 3003-1993
190 CONTINUE
200 END WHEN
210 LOOP
220 USE
230 IF EXTYPE=8101 THEN !non-numeric data
240 RETRY !get next data item
250 ELSE !give up
260 PRINT ”Unable to process file”
270 STOP
280 END IF
290 END WHEN
(4) 例外状態を引き起こす[構文(13)]。
CAUSE EXCEPTION I
12.1.4 意味 意味は,次による。
(1) プログラム単位の実行中に例外状態が起こったとき,とられる動作は,その例外状態がwhen本体の
内部で起こったか否かに依存する。例外状態がwhen本体の外部で起こった場合には,この規格で定
める省略時想定の例外状態処理手続き (dfault exception handling procedure) が適用される(2.4参照)。
この例外状態が続行可能なものであるならば,続行可能な例外状態に対する省略時想定の回復手続き
がとられる。
参考 ANSI X3.113ではこの最後の1文がないが,誤りであるので,TIBによって訂正した。
例外状態がwhen本体の内部で起こった場合には,例外状態を報告する省略時想定の例外状態処理
手続きは適用されず,代わりにその例外状態を起こした保護区 (protection-block) のうちで最も内側の
ものに対応する例外処理区 (exception-handler) に制御が移る。
(2) 保護区がwhen-in区であるとき,対応する例外処理区は,その保護区のuse行に続く部分とする。保
護区がwhen-use区であるとき,対応する例外処理区は,その保護区のwhen-use行で指名されたhandler
区 (detached-handler) とする。handler区の動作は,意味的にはwhen-in区における例外処理区の動作
と全く同じとする。
(3) 例外処理区の内部では,その例外処理区の実行を引き起こした例外状態の種別を,引き数なしの関数
EXTYPEの値によって知ることができる。この規格で規定されるすべての例外状態に対し,EXTYPE
の値が決められている。この値を,例外状態の説明とともに表12.1(166ページ)に示す。例外状態
を引き起こした行の行番号は,引き数なしの関数EXLINEの値によって知ることができる。
(4) 例外処理区から出るには,次の4通りの方法がある。
(a) 例外処理区戻り文 (handler-return-statement) ONTINUEを実行すると,例外状態を引き起こした文
に構文上続く文に制御が移る。do行,loop行,for行,if-then行,elseif-then行,select-case行又は
case行のように,構造を開始し,又は構造の一部となる行で例外状態が起こった場合は,その構造
全体に構文上続く文に制御が移る。
(b) 例外処理区戻り文RETRYを実行すると,例外状態を引き起こした文又は行に制御が移り,その文
又は行が再実行される。その文がデータ入力を実行していた場合には,以前の入力応答又は行入力
応答は無視されて,再度応答が要求される。
(c) 制御がend-handler行又は例外処理区を区切るend-when行に到達すると,制御はその例外状態を引

――――― [JIS X 3003 pdf 116] ―――――

                                                                                            113
X 3003-1993
き起こした保護区のend-when行に続く行に移る[(5)参照]。
(d) xit-handler文 (exit-handler-statement) を実行すると,その例外状態は,その例外状態の行を含む最
も内側の保護区を構文的に取り囲む環境に伝達される。[これを“構文的”な伝達という。call文や
関数引用などの“呼出し”の伝達については,(9)による。]すなわち,その例外処理区は,(そこで
既に実行されてしまっている文の効果はそのままとして,)あたかも存在しなかったかのように無視
される。この例外状態の処理の規則は,外側をwhen本体が囲んでいるか否かに依存する。
(5) 制御がwhen-in区のuse行又はwhen-use区のend-when行に到達すると,制御はその保護区に続く行
に移る。制御がhandler区のend-handler行に到達すると,制御はその例外状態を引き起こした
when-use区のend-when行に続く行に移る[(4)(c)参照]。例外状態の発生によらないで制御がhandler
区のhandler行に到達すると,制御はそのend-handler行に続く行に移る。
制御がwhen-in行又はwhen-use行に到達すると,何もしないで次の行に進む。
(6) osub用の行番号の棚は,各例外処理区ごとに独立して一つずつある[8.2.4(3)参照]。したがって,
retune文の実行によって,制御が例外処理区の内外をまたいで移行することはない。
(7) ause-exception文 (cause-statement) を実行すると,続行不能 (fatal) な例外状態になる。その例外状態
種別の値が最も近い整数値に丸められて,関数EXTYPEの値になる。
(8) 例外処理区の内部で重ねて起きた例外状態は,続行不能なものとして扱われる。このことは,
exit-handler文の実行,任意の例外状態種別をもつcause-exception文の実行及びその他の続行可能又
は続行不能なあらゆる例外状態を含む。
参考 ANSI X3.113の文章はやや異なるが,TIBによって訂正した。
(9) 手続きの外部への例外状態の伝達は,次による。
(9.1) ある外部手続き単位の内部又は内部手続き定義の内部で続行不能な例外状態になり,しかも次のい
ずれかの場合には,その外部手続き単位又は内部手続き定義を呼び出した行に,その例外状態が戻
され,伝達される。(“呼出し”の伝達。)
(a) その例外状態を引き起こした行はwhen本体中にないので,例外処理区に移ることがない。
(b) 例外処理区に移り,そこでexit-handler文を実行してその例外状態を構文的に外側に伝達するが,
それを受け止めるべきwhen本体が構文的に外側を囲んでいない。
(9.2) この伝達 (propagation) は,次のいずれかになるまで継続する。
(a) 利用者定義の例外処理区に入り,例外処理区戻り文を実行するか又はその例外処理区を区切る
end-handler行若しくはend-when行に制御を移すかして,その例外状態が解消される。
(b) 主プログラム又は並行単位に到達し,省略時想定の例外状態処理手続きが適用される。
(10) この伝達の結果,例外処理区が呼ばれた場合,関数EXTYPEの返す値は,(当初の例外状態が起こっ
た外部手続単位の内部又は内部手続定義の内部で関数EXTYPEが返すべき)通常の値に,100000を
加えた値とする。関数EXLINEの値は,例外状態が伝達された最後の行の行番号とする。(すなわち,
その例外処理区を指定するwhen本体中の行の行番号であり,例外状態の起こった当初の行の行番号
ではない。)
(11) 省略時想定の例外状態処理手続きが報告する関数EXTYPH及びEXLINEの値は,常に例外状態の起
こった当初の行に対するものとする。
(12) この規格に対して処理系が例外状態を追加した場合には,そのEXTYPEの値は負の数にしなければな
らない。EXTYPEの値が負である例外状態が伝達された場合,EXTYPEの返す値は,当初の例外状態
に対する通常の負の値から100000を引いた値とする。

――――― [JIS X 3003 pdf 117] ―――――

114
X 3003-1993
(13) 関数EXTYPEの値1999は,この規格の将来の拡張でも使用しない。処理系による拡張の場合にも,
使用してはならない。
(14) 関数EXTEXT$を引用すると,その実引き数の数値式の値が指標として評価され,最も近い整数値に
丸められる。その整数値を例外状態種別とする例外状態に対して,システムが用意する誤り通知 (error
message) の文章部分を,この関数の値とする。その整数値がシステムの標準例外状態の例外状態種別
と一致しないときには,関数EXTEXT$の値は,空文字列とする。
(15) 例外状態が伝達された結果,主プログラムに到達し,しかもそこで例外処理区が呼ばれない場合,そ
の例外状態は,この規格で定める省略時想定の例外状態処理手続きによって処理される。
12.1.5 例外状態 例外状態は,次による。
(1) ause-exception文が実行された。(例外状態種別,続行不能。)
12.1.6 注意 注意は,次による。
(1) この規格が規定する例外状態の伝達 (propagation) には,2種類ある。
(a) 一つは,“構文的”な外側への伝達であって,外部手続単位の内部又は内部手続定義の内部において,
例外状態の起こった行を取り囲む何重かの保護区に向かって,外側に進む。
(b) この伝達の結果,例外状態がそのような保護区の外部に出てしまうと,“呼出し”の伝達に移り,呼
び出した文に例外状態が伝達される。
(2) 関数EXLINEを利用するときは,注意が必要である。例えば,プログラムの行番号を付け直す再番号
付けの編集用機能(16.2参照)を用いると,EXLINEを含む計算の部分が無効になることがありうる。
例 次のようなプログラム部分は,行番号100から800までのプログラム部分に対して行番号の再番
号付けを行うと,異なった動作をする。
1000 SELECT CASE INT (EXLINE/100)
1010 CASE 1, 2
···
1100 CASE 3 TO 7
···
(3) 続行不能な例外状態が呼出し側の文に伝達されて,その結果,省略時想定の例外状態処理手続きで処
理されるとき,処理系は,当初の例外状態のEXTYPEとEXLINEだけは必ず報告する。処理系は,更
に,例外状態が伝達されてきた経路の行の行番号又は有用であると考えるあらゆる情報を報告しても
よい。
(4) 続行可能 (nonfatal) な例外状態は,呼び出されたルーチンの例外処理区又はシステムの省略時想定の
例外状態処理手続きで処理されるので,呼出し側のルーチンにそのまま伝達することはできない。し
かし,例外処理区の中でcause-exception文を実行して,続行不能な例外状態を引き起こすことはでき
る。
(5) ause-exception文は,実用上,規定されている例外状態を模擬することを意図したものではない。む
しろ,ある特定のEXTYPEの値をもった続行不能な例外状態を引き起こすために用いる。特に,
cause-exception文で指定されたEXTYPEの値が続行可能な例外状態を示すものである場合に,その続
行可能な例外状態があたかも実際に起こったかのように,処理系がその回復手続きを適用する必要は
ない。処理系は,通常,その例外状態を受け止めて処理する例外処理区が,利用者のプログラム中に
あると想定する。
(6) 正のEXTYPEの値は,すべてこの規格の将来の拡張に備えて予約されている。この規格に対して処理

――――― [JIS X 3003 pdf 118] ―――――

                                                                                            115
X 3003-1993
系が拡張し定義する例外状態は,表12.1(166ページ)で定めた分類に従った値を負にしたEXTYPE
の値をもたなければならない。処理系の定めた例外状態が外部手続単位の内部又は内部手続定義の内
部で起きたとき,EXTYPEの値は,その例外状態を識別する負の値から100000を引いた値とする。
例えば,新しい組込み関数に誤った引き数を使った場合に対して,−4029というEXTYPEの値を処
理系で定めたとする。副プログラムの内部でこの例外状態になったときに例外処理区がそこになけれ
ば,呼出し側のプログラムの例外処理区中で,EXTYPEの値が−104029となる。
(7) 処理系作成上は,“これこれの分類におけるその他の例外状態”を表すのに,EXTYPEの値のその分
類中で第0番目の値を用いることを推奨する。例えば,EXTYPEの値1000は,規格の定めるあふれ
以外のあらゆるあふれを表すことに約束できる。
(8) XTYPEの値1999は,応用プログラムの中でcause-exception文を用いてだけ起こすことができる。
これらの値に対しては,この規格の将来の拡張においても標準的な意味を与えない予定であるので,
応用プログラムはこの値を用いるよう推奨する。
(9) 例外処理区戻り文CONTINUEを用いるときには,注意がいる。例えば,def文,on-gosub文,on-goto
文,if文などの中で例外状態が起こったときに文CONTINUEを実行すると,制御はその行の構文的に
次の行に移る。この動作は,正常な制御の流れを回復することと等価であるとは限らない。
(10) 制御構造があるときの文CONTINUEの効果を次に例示する。
100 WHEN EXCEPTION IN
120 INPUT PROMPT ”Enter your age and weight”:a, w
130 DO WHILE a>1
140 IF a<9999999999 THEN
150 INPUT PROMPT ”What is your height”:h
160 PRINT ”Check the following:”
170 PRINT ”Age:”;a, ”Weight:”;w, ”Height:”;h
200 INPUT PROMPT ”Enter your age”:a
210 END IF
220 PRINT ”Lexically following IF”
230 LOOP
240 PRINT ”Lexically following DO WHILE”
······
例外状態の起こった行 CONTINUEによって制御の移る行
120 INPUT 130 DO WHILE (構文上の次の行)
130 DO WHILE 240 PRINT (対応するLOOPの次の行)
140 IF ··· THEN 220 PRINT (対応するEND IFの次の行)
150 INPUT 160 PRINT (構文上の次の行)
(11) 関数EXTEXT$の値の正確な形は,処理系定義とする。例えば,例外状態の個々の発生に特有の誤り
通知中の欄に対して,特別のやり方で印を付けたり,欄を省いたりすることにしてもよい。欄の例と
しては,例外状態を起こした行の行番号や範囲外になった添字の値などがある。

12.2 デバッグ

――――― [JIS X 3003 pdf 119] ―――――

116
X 3003-1993
12.2.1 概要 デバッグ (debugging) 機能は,BASIC言語の文によってプログラム中に検査点を設定できる
ようにする。これらの文によって利用者は,中断点 (break point) を設定したり,プログラムの動作を追跡
(trace) したり,デバッグシステム (debugging system) をそれぞれのプログラム単位ごとに活性化したり,
不活性化したりすることができる。
12.2.2 構文 構文は,次による。
(1) ebug文=DEBUG [{ON|OFF}]
(2) reak文=BREAK
(3) race文=TRACE ON{TO 経路式}?|TRACE OFF
12.2.3 例 構文の例を次に示す。
TRACE ON (3)
TRACE ON TO #3 (3)
12.2.4 意味 意味は,次による。
(1) 個々のプログラム単位は,一つごとにデバッグ状態 (debugging status) をもつ。これは,ある一時点で
は活性状態 (active) 又は不活性状態 (inactive) とする。主プログラム以外のプログラム単位における
デバッグ状態は,そのプログラム単位の次回の呼出しまで保持される。あるプログラム単位における
デバッグ状態の変更が,他のプログラム単位のデバッグ状態に影響を与えることはない。プログラム
の実行を開始する時点では,すべてのプログラム単位のデバッグ状態は,不活性状態とする。
(2) ebug文 (debug-statement) EBUG ONを実行すると,そのdebug文を含むプログラム単位においてデ
バッグが活性状態となる。このプログラム単位中でdebug文DHBUG OFFを実行するまでは,このプ
ログラム単位のこの回の実行の残り及びこのプログラム単位の以降の回の呼出しにおいて,デバッグ
は活性状態とする。プログラム単位中でdebug文DHBUG OFFを実行すると,そのdebug文を含むプ
ログラム単位においてデバッグが不活性状態となる。このプログラム単位中でdebug文DEBUG ON
を実行するまでは,このプログラム単位のこの回の実行の残り及びこのプログラム単位の以降の回の
呼出しにおいて,デバッグは不活性状態とする。
(3) デバッグが活性状態である時に,break文 (break-statement) を実行すると,例外状態になる。この例
外状態からの標準の回復手続は,break文の行番号を報告し,利用者にデバッグシステムとの対話が
可能であることを通知することとする。デバッグシステムが許す動作及びプログラムの実行を継続又
は終了させる方法は,処理系定義とする。デバッグが不活性状態である時にbreak文を実行すると,
次の行に進むこと以外に何の効果ももたない。
(4) デバッグが活性状態である時にtrace文 (trace-statement) を実行すると,ONであればそのtrace文を
含むプログラム単位において追跡を有効にし,OFFであれば無効にする。プログラム単位の各Eの呼
出しごとに,trace文を実行するまでは,追跡は無効とする。デバッグが不活性状態である時にtrace
文を実行すると,次の行に進むこと以外に何の効果ももたない。
(5) race文の実行は,デバッグ状態に影響を及ぼさない。debug文の実行は,追跡状態の有効・無効に影
響を及ぼさない。
(6) プログラム単位において,デバッグが活性状態であり追跡が有効である時には,次の種類の行が実行
されるたびに,それぞれの動作がなされる。
(a) プログラム中の行の順次実行を中断する行の場合には,その行の行番号と次に実行されるべき行の
行番号の両方が報告される。
(b) 単純変数又は配列要素に値を代入する行の場合には,その行の行番号とその行の実行によって代入

――――― [JIS X 3003 pdf 120] ―――――

次のページ PDF 121

JIS X 3003:1993の引用国際規格 ISO 一覧

  • ISO/IEC 10279:1991(IDT)

JIS X 3003:1993の国際規格 ICS 分類一覧

JIS X 3003:1993の関連規格と引用規格一覧