小型機によるFORTRANソースプログラムの エラーチェック
吉 田 将*
高 木 誠**
田 中 武 美*
長 野 宏 宣***
Error Check Program,for FORTRAN Source Program with Sm巳11 Scale Computer
1
Sho Yoshida;Makoto Takaki, Takemi Tanaka and Hironobll Nagano
1. まえがき 限を加えている。
電子計算機の利用件数は,年々増加している
2. 使用機器 が,本学の計算センターに設置されている電子計
算機が小型であるため,長時間の計算を要する場 本体:OKITAC−5090C
合や,・大容量の記憶装置が必要な場合は,外部の コァ4000語(1語50ビット)
大型計算機センターを利用しなければならない。 ラインプリンター:1台 このような場合,つまらないエラーのために,実 紙テープ読取装置:1台 際の計算がされないままプログラムが返ってくる
のは無駄である。現状では,ターンアラウンドタ 3・基本方針
イムが一週間以上にもなることがあり,その間研 チェックプログラム全般にわたって,次のよう 究が中断されることもしばしばある。 な約束をしておく。
また,本学では,ほとんどALGOLIPを使用 OKITAC−5090Cは紙テープ入力であるから,
するので,FORTRANを使う機会が少なく,プ ソースプログラムは,コーディングシートに書か ログラムのエラーが多いと思われる。そこで,九 れたそのままの形でテープにパンチする。また,
州大学に大型計算機センターが設置されたのを機 行の後にできたスペースは不要だから,ステート 会に,本学のOKITAC−5090Cを使って, FOR メントの終りに,エンドマークを付け(C/Lの TRANソ_スプログラムのエラーチェックプログ コードを使用する)その後にすぐ次の行を続けて
ラムを作ることにした。すでに幾つかの大学で同 パンチする。
じ目的のプログラムが作られているので,それら プログラムは,できるだけサブルーチンの形で を参考にした。文法は,九州大学に置かれている 作成し,同じ形の処理が重複するのを避けると共 FACOM230−60のFORTRANを基とした。な に,一部分のプログラムができれば・全体力Sでき お,記憶容量や処理の簡易化のために,多少の制 ていなくても,その部分のチェックが可能なよう
*電子工学教室
**株式会社島津製作所
***目本電信電話公社通信研究所
に鑑量および処醐の点から,、パスの方 START
法によるチェックを行なう。すなわち,ソースプ ログラムが全部読み込まれた時点で,チェックは 終了する。
処理は1プログラム単位ごとに行ない,実際の チェックは1ステートメント単位で行なう。他の 部分で必要となる情報は,表やカウンターを作っ て保存しておき,不要になれば消去する。
各行には先頭から順に追い番を付けて印刷し,
エラーが見いだされれば,その時点で同じ行の後 にエラーメッセージを印刷してその文のチェッを 終了し,次の文の処理に移る。チェックプログラ ムのできていないステートメントは,その行の後 に UNCHECKED の文字を印刷して次の文の
処理に移る。
4 チェックプログラム 4・1 全体の流れ
プログラム単位のチェックを行なう全体の流れ を図1に示す。
まず先頭の6文字を読み込み,第1桁目が C , * , ¥ であれば,それぞれ注釈行,デバ
ッグ行,JOB制御だから,読み込み,印刷し処 図1 全体の寵れ回 理する。そうでなければ,1行全部を読み込み,
印刷する。
4・2 表 次に,FORMAT文以外の文は文中の空白に意
味を持たないので,空白を詰めて格納する。同時 ソースプログラムを処理するために必要な情報 に,後で代入文を分離するための情報として, は・各種の表やカウンタに保存しておかなければ
(…) の外側にある. ・一 と・, との数をカウ ならないが・このプログラムでは・以下のような ンターに貯える。最後に, ( と ) との数の_ 表を用意する。各表の構造は図2に示す。
致をチェックする。FORMAT文はそのままの形 a キ・一ワード表
で格納する。 各ステートメントの先頭の6文字と,そのステ 空白詰めの後,END行かどうかを調べ, EN 一トメントのチェックルーチンの先頭番地とを格
D行であれば,終処理を行なってプログラム単位 納してあり,文の識別に利用する。
のチェックを終わる。
END行でなければ,次の行の先頭の6文字を b 名 前 表
読み込み,継続行以外の文の種類を識別し,チェ 1語に,ソースプログラム中で出現したすべて ックして次の文の処理に移る。 の名前を書込む。対応する情報部1語には,その 継続行の場合は,読込ルーチンに戻り,前記の 型(整数,実数,倍精度実数,複素数,倍精度複 処理をくり返す。 素数,論理),種類(変数,配列,文関数),
START
6字盲売込 ・ 駕 A
寧 c,)κ,¥
NO 舗込
@ルーチン
読込 @ルーチン
臼 刷 仲 刷
処 i理 空白詰
@ルー手ン
END行 6写1疏込 @ NO
苔処理
@∫し一チン
c,*,¥
@ NO 拒ア行
@ NO
STOP
1
識別 求[チン
識別 @几芦手ン
今エック
チェ・ソク求[チン
求[チン A
COMMON, EXTERNAL, FUNCTION, SUBRO O〜139番地はOKITAC−5090Cに固有のもの UTINE,値が入っているか,使用されたか,配 である。
列の次元数,DO文の制御変数とDO nestの深さ, この中の,120〜139番地は,印刷時のFORMAT COMMON, FUNCTION, SUBROUTINEの並び 記憶部で,読み込んだ1行分のステートメントは や引数の情報を記入している番地,を記入する。 そのまま印刷するから,ここに直接格納して印刷 する。
C 文番号表
定義文および指定文の文鶴追い獄の種ト:㌶難…膿竺驚て㌫二
類,等を書込む。指定文番号は,対応する定義文
番地と,関連のあるカウンターの番地が準備され 翻があれば・チェックした後消去する・践文 ている.したがって,このプ。グラムでは,繊 番号は,指定されれば,サインビットを1にして
おく・ 行訟鑑㌶さ芸クプ。グラムC命令
d 組込関数および基本外部関数表 ・ 群を入れる。OKITAC−5095Cは,1語2命令で これらは,それ自身の型,引数の型によって, あるから,命令は,約5400ステップまで可能であ 一群にまとめて名前を格納しておき,その番地に る。
よってそれぞれの型を判断する。 2900〜2999番地に,キーワード表を格納しておr く。
キー「ワード 表(2誌) 3000〜3599番地は名前表とする。使用できる変
時地 キーワード 糎の名前は約3°°である・
3600〜3799番地は文番号表とする。定義文番号 W+50番沌 処理ル・一手ン先頭番地 は若い番地から・指定文番号は古い番地からそれ ぞれ格納していく。
名前表(2培)
印刷領城
刊q W+300暑地 %20
バΨファ領斑工(空白鵠前〜
13 制衙襲散指示後級指示 胸ファ領域皿(蛍計き後)
EXτERNAし事…示
の 1旦±文番号表u誌) 鹸群 1
5追り番 種類 丈番ミ1 . . 2亀鴨 こヨ む
定載噛麟齢つoぽの深心
キーワーロ _洲
さ
組▲〜S関4k スL基本タト書?関数表(1言智) 名前表工 (づ島前) .
32r『,
ヨヨ コ
[亙玉==:=コ 名前喪・(撫) :
弱rr;
3600
文番号1良
37q角 回2 各種表の構造 38°° 組込蘭敬展基本外音ト簡敬表
38『¶
3900
作敦番地
4・3 記憶装置の割付 3『q『
記憶装置内における各表の位置を図3に示す。 図3 記憶装買?割付1
3800〜3899番地には,組込関数および基本外部 4・5 各文のチェック
関数表として,それぞれの名前を格納しておく。 識別が済んだら各文のチェックに移るが,キー 3900〜3999番地は作業番地で,COMMONの並 ワ_ドの長いステ_トメントは,まず5字目以下 びやFUNCTION・SUBROUTINEの仮引数の情 のっづりを調べ,その文であることを確認してお 報を格納する。 いてチェックに移る。
文が多数あるので,ここでは,型宣言文,
4・4 文の識別
DO文,代入文について説明する。
文の識別を行なう部分の流れ図を図4に示す。
まず空白詰めのとき作成したカウンターを調べ a型宣言文:type V1,V2,…,V・
て, (…) の外側に 一 があり・ ・ がなけ チェックの流れ図を図5に示す。
れば代入文であるから・その処理に移る。この時 後の並びはすべて変数名または配列名であるか IF文も同一の情報を持つ可能性があるので(たと ら,まず名前が文法に合っているか (先頭は英 えばIF(A・GT・B)MAX=A)・先頭3文字が 字,全体で6字以内)を調べ,名前表をサーチす
hF( であればIF文の処理に移す。 る。表に同じ名前があれば,同じ名前を2重定義 代入文でなければ・短いステートメント(DO・ したことになり,エラ_である。
IF・LCM)を分離し・その処理に移る。 次に配列かどうかを調べ,配列でなければその いずれでもなければ・4字読み込んで・キーワ 名前,型,種類を,配列ならそれに加えて次元数
一ド表をサーチし・対応する文のみ処理に移る。 を書き込む。
ここでも概当する文がなければ・つづりの違いな 同じことをC/Lがくるまでくり返す。
どのエラーである。 配列宣言文の場合は,表に名前が登録されてい 識別から処理に移る前に・文番号の有無を調 てもかまわないので,涜れ図が少し変わる。
べ,あればその処理をしておかねばならない。
START START
代λ 文
1・ NO ・ 3隊曽ξ込
1 2零翫込 、 l lF( N°
l DO
l ・。 D。蜘熱 貸
∴ 3日P目魯灸込 文
…lIF( 1醐理へ藁
1, N。
l LCM LCM支処董堅へ
l N。
:ゾ4守桓読込
歳充チェック 名前型登録
{
キーワード表」サーチ NO
i C/L ERROR 有 各文皿理へ YεS㌦
i. NO 「 STOP
l ERROR
『