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

[[戻る|ForthImplementation]] [[前へ|DisplayingStack]] [[次へ|ScanningProgramCode]]
[[戻る|Forthを作ってみる]] [[前へ|Forthを作ってみる / スタックの内容を表示する]] [[次へ|Forthを作ってみる / プログラム配列を走査する]]

{{adsence}}