昔のBASICのFOR~NEXT文 (基礎文法最速マスターで思い出した)

2010/02/05FM-8, 昔のパソコン

はてな界隈でいろんな言語の「基礎文法最速マスター」なんてのが流行っているようで、とうとう「fortran 基礎文法最速マスター」なんて記事も現れた。

対抗してkumajiri最速マスターを書いてもいいのだが、それはさておき、昔のBASICで思い出したことがある。

太古のBASICでは、繰返し文は FOR~NEXTしかなかった。その後 WHILE~WENDも追加されたのだけど、REPEAT~UNTILはなかったような。で、そのFOR~NEXTなんだけど、昔のBASICインタプリタ時代には、FORで繰返しループをスタックに詰んでNEXTでそれを読んで繰り返してた。

  • FORが来たら、制御変数とステップ値(省略すると1)、終値をスタックに詰む
  • NEXTが来たら、
    • 次に制御変数があれば、該当する変数が積まれてるところまでスタックをPOP
    • 制御変数にステップ値を足して、終わり値を超えていなければFORの次に戻る
    • 超えてたら、スタックをPOPして次に

こういう実装なので、FORとNEXTが1対1じゃないプログラムは平気で書けたし、IF XX THEN NEXT I ELSE NEXT J なんてのも書けた。
FORとNEXTを使って catch~thru みたいなのも書けた。変態だ。(実装依存だけど)。
これをコンパイルするのは大変なんだけど、MSのコンパイラはどうやってたっけなあ。ソース上だけ見てコンパイルしてたんだっけなあ。
自分が卒論で書いたコンパイラはソース上の関係しか見てなかったはず。

昔のBASICといえば、変数の型があるようでないようなのもあったような。もう忘れかけてる。

リンク

FM-8, 昔のパソコン

Posted by ず@沖縄