トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

Forthを作ってみる / Forthを実行してみる?

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はプログラムの終了にしておく。今決めた。

戻る 前へ 次へ