• 検索結果がありません。

構造化FORTRANの試作と使用経験 利用統計を見る

N/A
N/A
Protected

Academic year: 2021

シェア "構造化FORTRANの試作と使用経験 利用統計を見る"

Copied!
5
0
0

読み込み中.... (全文を見る)

全文

(1)

構造化FORTRANの試作と使用経験

井内稔 (昭和52年8月31日受理)

Implementation of Structured FORTRAN and it Experience

MinoruIUCHI Abstract  This paper describes an extention of FORTRAN, called Structured FORTRAN, which is upward compatible with FORTRAN with a few exceptions and which contains control structures intend to make FORTRAN not just an acceptable but a good way for structured P「09「amlng.

1.はじめに

 近年,構造的プログラミング(以下S.P.と略記す る)やソフトウェア工学をめぐる研究や論議が盛んに なるにつれて,プログラミング言語の仕様について幅 広い注意がはらわれるようになってきた。  いっぽう多くの科学技術者によって広く使われてい

る言語はFORTRANであり,これはソフトウェア工

学の見地からすればあまり好ましくない言語である。 そこでS.P.の記述という要求に対するひとつの手段

として拡張された構文を標準FORTRANに変換する

プリプロセッサを作ることが広く行われている。本稿 で述べる構i造的FORTRANの試作では, Habermann, Knuth, Zahn らが提唱した新しい構文およびその改 良形を含め,これを用いてこれらの構文の使用実験を 行っている。

2.仕

様  ここでいう構造的FORTRAN(以下S. F.と略記

する)は既存のFORTRANにS. P.の見地からい

くつかの機能を追加したものである。広義のS.P.で は,プログラム内での制御構造をはじめ,データ構造 およびそこで許容される演算機能も重要である。しか し,ここでは狭義のS.P.の立場から,とりあえず制 御文関係の拡張だけをとりあげた。  プリプロセッサの方式としては種々の方式が可能で ある。ここでは他システムとの互換性が保てるように プリプロセッサそのものを標準FORTRAN(JIS 7000 レベル)で書き,S. F.で書かれたプログラムを標準

FORTRANに変換し,変換されたプPグラムを標準

FORTRANの処理係で処理させる方式とした8)。こ のためエラーメッセージ等はS.F.のレベルで出力し ていない。

 使用可能な文の種類としては,標準FORTRANに

おけるDO文およびIF文を除くすべての文と,以下 に示す9種類の拡張機能の構文である。

 1)IF−FI文

 2)DO−OD文

 3)DO−CASE文

 4)DO−WHILE文

 5)DO−UNTIL文

(一般にrepeat−until構文と呼ぽれるもの)

 6)DO−FOREVER文

 7)Habermannの構文

 8)Knuth−Zahnによる状況反復構文  9) 同上構文の改良構文1)  ここでは,新しい構文の使用実験を行うために,構 文の拾捨選択は行わず,新しいものもどんどん追加し てゆくことにした。そのため閉じた言語仕様として は,必ずしもバランスがとれているものにはなってい ない。このほかに,自動的に行のあげさげをする機構 を備え,これらの構文のもつ構造を反映したリスティ

(2)

ングを印刷している。 3. 拡張機能の仕様

 FORTRANに基づいているため,文の記述は一行

一・カである。 (1)IF−FI文 IF ( 論理式  ) 文 FI  この文はキーワードがDO UNTILである。実行の 際には論理式が判定され,結果が真になるまでDO

UNTILとOD文の間の文がくり返される。この文か

ら抜け出した時にはOD文の次の文に実行が移る。ま たこの文は必ず1回はループの中味をくり返す。

(6)DO−FOREVER文

DO FOREVER 文

OD

ELSE 文  この文はキーワードがIFであり, FI文と対になっ て使用される。実行の際には,論理式の結果が真なら ぽこの次の文に,偽ならぽELSE文またはFI文の次 の文に実行が移る。 (2)DO−OD文 DO 整数型変数 = 初期値パラメータ 終値パラメータ 文 OD 増文パラメータ  この文はキーワードがDOであり, OD文と対にな

って使用される。標準FORTRANのDO文から文番

号を削除したものに相当する。 (3)DO−CASE文

 この文はキーワードがDOCASEでありESACOD

と対になって使用される。実行の際には,整数型変数 の値により以下に現れる各CASEブロック (CASE 文とESAC文とが対になって作成される)に実行が移 り,各ブロックが終了するとESACOD文の次の文に 実行が移る。また整数型変数の値以外のCASEブロ ックとして,CASE ELSE文を使用してCASE ELSE ブロックを作成することができる。

(4)DO−WHILE文

DOWHILE ( 論理式  ) 文  OD

 この文はキーワードがDO WHILEである。実行

の際には論理式が判定され,結果が真である間は,

DO WHILEとOD文の間の文がくり返される。こ

の文から抜け出した時にはOD文の次の文に実行が移 る。 (5)DO−UNTIL文

 この文はキーワードがDO FOREVERでありOD

文と対になって使用されDO FOREVER文とOD文

の間の文をくり返し実行するものである。またループ より抜け出す時にはGO TO文等を使用する。

(7)REPEAT−UNTIL文(Habermannの構文)

DO UNIIL  (  論理式  )  この文はwhile・rePeatの複合形であり,キーワー ドがREPEAT, UNTIL, DO, ODである。実行の際 には,まず文1が実行される。次に論理式が評価され 値が偽なら,次に文2を実行し,論理式の値が偽の間 この間が反復実行される。論理式の値が真なら反復を 終わる。 (8)LOOP−UNTIL文(Knuth−Zahnの構文)   LOOP UNTI   状況宣言   DO  文  REPEAr THEN 文  OD OR  この文はキーワードがLOOP UNTIL, DO, RE− PEAT THEN, CASE BEGIN, ENDである。状況

宣言のいずれか一つが成立するまでDO, REPEAT

THENの間の文を反復実行し状況宣言の一つが成立 するとその状況宣言に対応する状況別CASEブロッ

クが実行される。各CASEブロックの実行後はEND

文の次の文に実行が移る。

(9)LOOP−SITUATIONS文

LOOP  文   SITUATIONS 状況宣言 OR CASE READY   文   REPEAT 状況別CASE  :  文 AGAIN ENDLOOP

(3)

 この文はキーワードがLOOP, SITUATIONS,

READY, REPEAT, CASE, AGAIN, END LOOP であり,LOOP−UNTIL文に初期値設定文が付いたも

のである。AGAINはオプショソであり各状況別

CASEブロック中に書くことができこの文に実行が移 るとREADYの次の文に実行が戻る。 占8Pト↓経IE‖NTεGER(A“召一一一一一一一一一① 鞭li膿認;1.。))一.一一一②    x=A    I:βEAT   −一一一一一一一一一③     IF (X.GT.Y)       トエ     界(Y.GT.X)     FII冨2    UNTIL (X.EQ4Y)    D°D。CASE I −一一一一一一一一一Q)          1       CASE        X=X−Y       ESA(       CASE.y≧X       ESAC       CAsE ELSE        STOP       ESA(二     ESA(OD          86↓T:6編♀21㍍1。X,14)   し      ’    窒96TEδ8“X9∼IH.・。X.・N・TG.C、M.・) OD Fl 999 STOP END ①:DO−FOREVER文使用fe’[J ②:IF−FI文使用例 ③:REPEAT−UNTIL文使用fダ‖ ④IDO−CASE文使用例 図一1拡張構文の使用例    IMPLI(lT INTE6ER (A−∠) ⊂     DO FO}くEVER 9999 co T1NuE 、。。ド8食織▲?2sEND=999)A⑱゜ C     IF ((A.GT.O)・AND・(b・bT・0))    IF ((A◆GT・0)・AND‘(ts・bl・∪))(30 TO  9998    GO TO  9997 9998 coNτINUE    X=A    Y=b    REPEAT c 9996 CONTIb,9UE ⊂    IF (X・6T・Y)    IF (x・GT.Y) GO TO  99y侍    GO T{⊃  9993 9994 CONTINUE    1=1 C    Fl 9993 CONTINUE C    IF (Y.GT・X)    lF (Y.GT.X) GO ’「0  9992    GO 「0  9991 9992 CONTltgUE    li2 C    Fl 9991 CON丁1NUE C    UNTIL (X.Eb】.イ)    IF (X・EQ.Y) G(X TO  ∋99b ε B8c、SEI    GO T∼)  9990 C    CASE 1 9988 (二〇NT匡NUE    X=X−Y C    εSA(    GO TO  9989 C    CASE 2 9987 CUN’「INUE    Y=Y−X ⊂    ESAC    GO TO  9989 C     CASE ELSE 9986 (ONTrtyUE    STOPC    F. SA(    GO TO  9989 C    ESACO[) 9990 GO TO( 9988, 9987 ).1    60 TO  9986 9989 CONTINUE

C 88T。9996

9995 CON『「1NUE    WRITE(6.200)X  200 FOR卜AAT(1H ●10X‘14)    ELS’⊂    GO TO  9985 9997 CONTINUE    ∀RITE(6,300)  300 FoRMAT(1H ‘1r)Xs°NOT 6・(二・M・°) C    FE 998う CONTIト・UE c     88 TO  9999  999 STOP    END   図一2図一1のプログラムの展開形 4.S.F.の良い点と悪い点  S.P.の考えかたに基づけぽ,アルゴリズムやデー タの詳細化の機能およびデバッグの機能等が必須条件

と考えられ,ここでのS.F.はまだFORTRANの域

を出ない。しかし,最近のプログラミソグにおける重 点は,効率向上から高信頼性へと移りつつあると考え られる。高信頼1生のためには理解しやすいプログラム を書くことが第一条件である。この点について考える

と,整った構造をもつプログラムはFORTRAN,

COBOL,さらにアセンブリ言語でも書くことは不可能 ではない。しかしここでのS.F.は,既存のFORTRAN にある程度の制御構造の拡張を行っただけで,既存の

FORTRANにくらベプPグラムの構造をかなり明確

にできる。以下に,ここで用いたS.F.における良い 点と悪い点について使用経験から気づいたことを列記 する。 (1)良い点 。制御構造の拡張によりプログラミング・スタイルが  良くなってきている(良いプログラミソグ・スタイ  ルは理解しやすいプログラムと関連する)。 。FORTRAN よりも,直接アルゴリズムに添った記  述が可能である。 。S. F.でプログラムを作成した場合,標準FORTRAN  で作成したものと比較すると,プログラムサイズは  やや大きくなるが,処理時間(実行時)にはほとん  ど差異がなく,効率低下は生じない。 。自動的に行のあげさげを行うのは便利である。 。学生のレポートのプログラムでも読み易い。 。FORTRANよりプログラムが書きやすい。 (2)悪い点 。FORTRANに基づいているため文の記述が一行一  文となるので記述面での不自然さが残る。 。DO−UNTIL文など,構文によっては不自然な面が  残る。 。上記二例にも関連するが,構文の構造が必ずしも明  瞭でなく読みにくいものがある。 。制御構文の種類が多すぎる。

(4)

。IF−FI文等の乱用を行うとかえってプログラムが読  みにくくなる。 。S.F.のレベルでデバッグができない。エラーメッ  セージは,S. F.を開いた先のFORTRANのレベ  ルで出されたものを利用することになる。 ・自動的な行のあげさげによってかえって読みづらく  なる場合が時々ある。 。データ構造等がFORTRAN レベルであり, S. F.  にはとりあげられていない。  4.1新しい構文の使用実験  新しい構文実験でとりあげた構文 (1)Habermannの拡張されたrePeat構文

 REPEATが最初にあるのは不自然であるがDO一

       ト

UNTIL文やDO−WHILE文よりも自然であり扱い易

く,この両構文におき換えられる。 (2)Knuth−Zahnの状況を用いた構文 (3)同上の改良構文  使用経験不十分である。また扱う問題によって使い 易さの程度が大きいように思われる(使いなれていな いからかもしれない)。 5.使 用 例 SUBROUTINE SEARCH(SDATA) 工MPLIC工[1]工NTEGER(A−Z) COMMON TABLE,COUNT D工MENS工ON TABI」E(101),COUNT(lOl) DATA TRUE,FALSE,EMPTY,M/1,0,−1,ユ00/  LOOP   KEY=MOD(SDATA,M)+l   ONCE=TRUE   S工TUATIONS FOUND OR NOEX工S[[  READY   工F (TABLE(KEY).EQ.SDATA)    FOUND   E工」SE    IF (TABLE(KEY).EQ.EMP[1]Y)     NOEXIST    F工   F工   KEY=KEY+1  REPEAT   CASE    FOUND:     COUNT(KEY)=COUNT(KEY)+l    NOEXIS[1] :     工F (ONCE.EQ.FALSE)      RETURN     ELSE      工F (KEY.EQ.M)      KEY=l      ONCE=FALSE      AGAIN      F工      TAIBLE(KEY)=SDATA      COUNT(KEY)=l     F工  END LOOP RETURN END 図一3S.F.のプログラム例  図一3はハッシュ表登録検索のプログラムをS.F.で 書いたサブルーチン部である。SITUATIONSの次に

書かれているFOUNDおよびNOEXISTは状況名で,

FOUNDまたはNOEXISTのどちらかが生じるまで

READYとREPEAT間の文を反復実行し,生じる

とCASE以下のどちらかのCASEブロックを実行す

る。NOEXISTの処理中のAGAINはオプションで

ありREADYの次の文に実行がもどる。 6. おわりに  本稿ではS.P.の指向のひとつの手段としてプリプ ロセッサの作成が容易であり,かつ有効であることを 述べた。しかし現段階ではまだ不十分である。今後 S.P.のための構造化された言語としてはいろいろな 機能追加が考えられる。特に,S. F.がひとつの言語 としてみることができるように,バランスのとれた構 成を考えなけれぽならない。制御構造,データ構造お よびそれに対する演算機能等の注意深い選択が重要と

考えられる。また,FORTRANでは許されない再帰

的なサブルーチンも,構造化されたプログラムを書く 場合に便利なもののひとつである。これをプリプロセ ッサの形で処理することはそれほど困難ではないはず である。さらに,言語としては解析やデバッグ機能も 重要であり,解析およびデバッグに対するいろいろな 機能追加が考えられる。これらのことをふまえ,現在 第2版のS.F.を作製中である。 謝 辞  本研究に当たり詳細な議論をいただいた有澤誠助教 授,ご助言いただいた吉澤正助教授,およびご助力い ただいた本学工学系大学院中島健君に感謝する。

参考文献

1)有澤:構造化プログラムにおける非決定性構文と新し   いループ構造,情報処理,18−5,p502−504(1977). 2) Charmonman, S.,&Ralston, A.:Structured   FORTRAN and the first course in computer   Science, Computers in Education(Lecarme and  Lewis eds.)North・Holland Pub. Cmpany(1975). 3)Cook, A., T.,:EXPERIENCE WITH EXTEN−   SIBLE, PORTABLE FORTRAN EXTENSIONS,   Singplan Notices, September(1976). 4) Dahl,0. T., Dijkstra, Ew.,&Hoare. C. A. R.:   Stroctured Programing, Academic press(1972).

5)富士通:FACOM 2300SII FORTRAN文法書

  (1975).

6)同上:FACOM 2300SII FORTRAN使用手引

 書(1975). 7) Habermann, A. N.,:The corectness of a quad一

(5)

8) 9) 10) 11) ユ2) ユ3) ratichash algorithm, Carnegie・Mellon Report (1975). Higgins, D. S.:Astructured FORTRAN translator. sigplan Notices, February(1975). 井内,有澤:構造的FORTRANの試作と新しい構 文の使用実験,電子通信学会全国大会論文集(1977). Kernigran, B. W.,&Plauger, P. J.,:The Elements of Rrograming Style,(木村訳:フ゜ログ ラミング書法,共立出版(1976)). Knuth, D. E.:structured programing with go to statements, Computing Surveys 6−4(1974). Knuth, D. E.,&Zahn, C. T.:Jr.“Ill・chosen Use of Event”. CACM 18,6June(1975). Meissner, L. P.:A comptible “structured”    extension to Fortran, Sigplan Notics, October    (1974). 14) Ralston, A.,& watener, J. L:strutured    Fortran’An Evolution of Standard Fortran,    IEEE transactiion software engineering, Sept    (1976). 15)鳥居,杉藤,真野,二木:プログラム作成技術の現状    に関する調査報告[1],電子技術総合研究所(1975). 16)Wirth, N.:Systematic Programing:An In・    troduction(野下他訳:系統的プログラミングー入    門,近代科学社(1975)). 17)吉澤,井内:計算機入門の改善,山梨大学工学部研究    報告,第27号,P.116−121.

参照

関連したドキュメント

 トルコ石がいつの頃から人々の装飾品とし て利用され始めたのかはよく分かっていない が、考古資料をみると、古代中国では

テューリングは、数学者が紙と鉛筆を用いて計算を行う過程を極限まで抽象化することに よりテューリング機械の定義に到達した。

※ 硬化時 間につ いては 使用材 料によ って異 なるの で使用 材料の 特性を 十分熟 知する こと

これはつまり十進法ではなく、一進法を用いて自然数を表記するということである。とは いえ数が大きくなると見にくくなるので、.. 0, 1,

【その他の意見】 ・安心して使用できる。

9/21 FOMC 直近の雇用統計とCPIを踏まえて、利上げ幅が0.75%になるか見 極めたい。ドットチャートでは今後の利上げパスと到達点も注目

利用している暖房機器について今冬の使用開始月と使用終了月(見込) 、今冬の使用日 数(見込)

 「フロン排出抑制法の 改正で、フロンが使え なくなるので、フロン から別のガスに入れ替 えたほうがいい」と偽