トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Forthを作ってみる / ワード名を登録するの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!ワード名を登録する

まずワード名を保存する領域を作っておく。

 char word_heap[100];            /* ワード名登録領域 */

ワード名を登録するには、word_heapの先頭から領域を少しずつ分けてもらう。 
領域内のワードは、文字終端記号(0x0)で区切られている。 
最初はすべて未使用領域であり、ワード名を登録する必要が生じたときに、空き領域を先頭から少しずつ使っていく。 
なので、未使用領域の先頭位置を保存する変数が必要である。

 char word_heap_index;           /* ワード名登録領域の未使用領域の先頭を指す */

ワード名登録関数は以下の通りである。

 /* ワード名を登録する */
 char reg_word_name(char *str)
 {
     char reg_pos = word_heap_index;
 
     /* コピーする */
     while (*str != '\x0') {
         word_heap[word_heap_index++] = *str++;
     }
 
     /* 文字終端をつける */
     word_heap[word_heap_index++] = '\x0';
 
     /* 登録時の先頭位置を返す */
     return reg_pos;
 }

先のワード名hogeを登録するには、reg_word_name("hoge")のように使う。
その名前が必要なくなったらどうするかは考えていない。

[[戻る|ForthImplementation]] [[前へ|ImplementingDefineWord]] [[次へ|RegistingWordProcedure]]
[[戻る|Forthを作ってみる]] [[前へ|Forthを作ってみる / ワード定義を実装する]] [[次へ|Forthを作ってみる / 処理内容を登録する]]

{{adsence}}