コマンドとステートメント

コマンド専用のトークンはNEW、LIST、RUNの3つで、これらはステートメントにならない。東大版TinyBASICで動かしてみたところ、これらをプログラムに記述するとエラーになるし、「;」で区切って(たとえば「LIST;RUN」のように)羅列することができない。しかし、コマンド専用でないトークン(つまり前述の3つをのぞくすべてのトークン)はステートメントとしてプログラムに記述できるし、行番号なしで入力するとコマンドになってすぐさま実行され、「;」で区切って(たとえば「A=1;PRINT A」のように)羅列できる。簡単にいうとNEW、LIST、RUNの3つはステートメントにならないという特別な機能をもたせなければならない。その機能を省略して全部のトークンがコマンドにもステートメントにもなるように作ったらどんな問題が起きるのだろうか。

ステートメントとコマンドは先頭に行番号があるかないかで区別する。行番号をバイナリに変換するGINTは行番号がないと0を返すから、東大版TinyBASICはGINTが0を返したらコマンドと判断する。しかし、行番号が0だったときもGINTは0を返す。したがって、行番号0のプログラムは文法違反なのにエラーではなく受け付けられて保存されず、コマンドとして実行される。この動作はどうかと思うが、いくらか問題があるからといってオリジナルにない機能を追加していたらキリがないので、このままにしておく。

というつもりだったのだが、リストの先頭に行の長さを示す値を置いた関係で(詳細は論旨に関係がないので省略)、現状、行番号0はエラーではなく受け付けられて保存されず、コマンドとしても実行されない。これはまずい。せめてエラーくらいは表示したほうがいい。つまりオリジナルのとおりのヘンな働きを実現するにしても余計な機能を追加しなければならない。処理の流れを整理すれば何とかなるだろうか。

広告
カテゴリー: TinyBASIC パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中