Forthを実行してみる?
さて、以下の準備はできた。
- スタック(データ構造)
- 値をスタックに積む処理
- スタックから値をとる処理
- 加算処理
- 表示処理
では実行してみよう。と思ったができない。
プログラム
4 5 + .
を内部的に表現できていないのだった。 すっかり忘れていた。
プログラムとして表現するには、文字列"4 5 + ."をコード化して表現すればよい。次のようにコード化する。
コード化対象 | コード |
---|---|
値をスタックに積む処理(push) | -1 |
加算処理(plus) | -2 |
表示処理(print) | -3 |
値4 | 4 |
値5 | 5 |
スタックから値をとる処理(pop)はコード化していないが、popはプログラム上で単独で現れないためである。 コード化すると、プログラムは配列として表現できる。
プログラムデータ構造は、以下の変数を用いる。
char prog[100]; int prog_cnt;
prog[]にはコード化されたプログラムが保存され、prog_cntはprog[]からコードを取り出すためのインデックスの役割を担う。
コード化されたプログラム"4 5 + ."は次のような配列データとなる。
-1, 4, -1, 5, -2, -3
プログラム配列prog[]に代入してみる。
prog[0] = -1; prog[1] = 4; prog[2] = -1; prog[3] = 5; prog[4] = -2; prog[5] = -3; prog[6] = 0;
コード0はプログラムの終了にしておく。今決めた。