コンソール入力はどう実行するか?
forthを起動し、
2 3 + .
と入力したとき、どのように処理するか?
ひとつは、切り取ったトークンを片っ端から処理する方法がある。
- '2'が来たらスタックにプッシュする
- '3'が来たらスタックにプッシュする
- '+'が来たらスタックにプッシュされた2つの値をポップ・加算・加算値をプッシュする
- '.'が来たらスタックからポップした値を表示する
この方法を用いたとき問題になるのは、分岐が発生したときである。たとえば、
if ." OK" else ." NG" then
だと、'if'が来たらスタックトップの内容で次に行う処理を選択する。しかしワードをその場で処理する方法だと、まだ飛び先が決まっていないこの時点では処理できない。
そこで、一旦ワード化し、中間コードに落としてから処理する。
- コンソールからの入力は専用のワードに登録する
- その後、そのワードを実行する
こうすれば、分岐先が決まらない問題を解決できる。
- Amazonリンク
- Portable Forth