コマンド処理系の機能拡張
現在の実装は一行ごとの処理のみ行えるようになっています。このままでは
コマンド言語処理系としては不十分でしょう。通常のコマンド言語処理系の
ように、条件分岐や繰り返しなどを行える機能を追加していく必要があります。
そこで次のような拡張を加えていくことにします。
- 定数
- これはすでに導入されていますが、整数、浮動小数点数、文字列の
定数を使用できるようにします。
- 変数
- コマンドの引数や表現に変数を使えるようにします。これらは、
コマンド言語処理系が使用するオブジェクト名と混同されないように、
$で始まる文字列として文法的には区別されます。
- 変数には処理系内部で使用できるコマンド変数と、大域的な名前空間変数が
あります。これ以外の変数を扱えるように、変数組み込みの仕組みを用意します。
これを変数テーブルと呼びます。
- 変数の値を設定するコマンドを用意する必要があります。BASICのLET命令に
対応します。新たに変数を宣言する場合は、それがどの変数テーブルに
割り当てられるかがコントロールされなければなりません。
- 変数の型には、整数、浮動小数点数、文字列があります。それらの実装は
変数の種類ごとに異なっても構いません。
- 配列
- 効率的に変数を使用するために、配列を用意します。配列は変数に次元を
与えるだけの簡単な機構で実現します。つまり、一次元配列だけが実装されると
考えてよいでしょう。
- 配列要素は通常の変数と同じように使用されます。文法的には[]で囲まれた
表現が配列のインデックスになります。インデックスには任意の整数表現が
許されるべきでしょう。
- 表現
- 表現は式とも呼ばれます。変数や定数と演算子の組み合わせで値を表現します。
- 扱われる値は整数、浮動小数点数、文字列があります。整数は浮動小数点数に、
浮動小数点数は文字列にプロモートされます。
- 演算には算術演算、論理演算、文字列演算が考えられます。シンタックスとしては
ユーザが慣れているプログラミング言語のものと同じほうが望ましいでしょう。
- 算術演算は整数と浮動小数点数について通常のプログラミング言語に準じて
実装されます。
- 論理演算についても同様です。文字列に対しても一致・不一致、大小を判定
します。
- 文字列演算については、+による連結、-による一致部分切り取り、/による、
一致文字以下削除などいろいろ考えられるでしょう。
- 流れ制御
- 表現の値を用いることにより、流れ制御を行えるようになります。値により
分岐したり繰り返しを制御します。if/else/endif、while/endwhile/breakを
導入します。もちろん他の制御も可能でしょう。
- このことは複数のコマンド文字列を管理する必要があることを意味します。
- whileを検出すると、対応するendwhileまでを記憶しておく必要があります。
breakの実行によりこの範囲の記憶は解放されます。
- ifの実装では実行される部分とされない部分ができることになります。この
場合は文字列の記憶は必要ありません。
[ File = konoe/ui/command/language.html ] last modified = 02-Jul-1998
KONOEコラボレーション
konoe-req@kuhes1.scphys.kyoto-u.ac.jp