規則に従うコーディング形式では、わかりやすいように Forth ワードの定義ごとに、それぞれの最初の定義行に (--) の形式のスタックダイアグラムを表記する必要があります。スタックダイアブラムは、ワードを実行するとスタックがどうなるかを指定するものです。
-- の左側に置かれる項目は、 スタックから消費 (つまり削除) され、そのワードの演算に使用されるスタック項目を示します。-- の右側に置かれる項目は、ワードの実行の終了後にスタックに残されるスタック項目を示します。たとえば、ワード + のスタックダイアグラムは (nu1 nu2 -- sum)であり、ワード. のスタックダイアグラムは (nu --)です。したがって、+ は 2 つの数値 (nu1 と nu2)を削除し、次にそれらの和 (sum) をスタックに残します。ワード . はスタックの一番上の数値 (nu) を削除し、それを表示します。
スタックの内容に影響しないワード (showstack や decimal など)のスタックダイアグラムは (--) になります。
場合によっては、ワードのすぐ後に別のワード、またはほかのテキストが必要なことがあります。たとえば、seeは、 see thisword (--)という形式で使用されます。
スタック項目は、正しい使い方がわかりやすいように、一般的に (意味を表すような) 説明的名前を使用して書きます。このマニュアルで使用するスタック項目の省略表記については、表 4-1を参照してください。
表 4-1 スタック項目の表記法
表記 |
説明 |
---|---|
| |
前後に空白文字を入れて表示される代替スタック結果。たとえば、( input -- addr len false | result true )。 |
| |
前後に空白文字なしで表示される代替スタック項目。たとえば、( input -- addr len | 0 result )。 |
??? |
未知のスタック項目 (1 つまたは複数)。 |
... |
未知のスタック項目 (1 つまたは複数)。スタックコメントの両側に使用した場合は、両側に同じスタック項目があることを意味します。 |
< > <space> |
空白区切り文字。先行空白文字は無視されます。 |
a-addr |
可変境界アドレス。 |
addr |
メモリーアドレス (一般的に仮想アドレス)。 |
addr len |
メモリー領域のアドレスと長さ。 |
byte bxxx |
8 ビット値 (32 ビットワードの下位バイト)。 |
char |
7 ビット値 (下位バイト)。上位ビットは不定。 |
cnt len size |
カウント値または長さ。 |
dxxx |
倍 (拡張) 精度数。2 スタック項目 - スタックの一番上の上位 quadlet (32 ビット)。 |
<eol> |
行末区切り文字。 |
false |
0 (false フラグ)。 |
ihandle |
パッケージのインスタンスのポインタ。 |
n n1 n2 n3 |
通常の符号付き値 (32 ビット) |
nu nu1 |
符号付きまたは符号なしの値 (32 ビット) |
<nothing> |
ゼロスタック項目。 |
phandle |
パッケージのポインタ。 |
phys |
物理アドレス (実際のハードウェアアドレス)。 |
phys.lo phys.hi |
物理アドレスの下位/上位セル。 |
pstr |
パックされた文字列。 |
quad qxxx |
quadlet (32 ビット値)。 |
qaddr |
quadlet (32 ビット値) 境界のアドレス。 |
{text} |
省略可能なテキスト。省略した場合は、デフォルト操作が行われます。 |
"text<delim>" |
入力バッファーテキスト。コマンドの実行時に構文解析されます。テキスト区切り文字を <> で囲みます。 |
[text<delim>] |
同じ行上のコマンドのすぐ後のテキスト。ただちに構文解析されます。テキスト区切り文字は <> で囲みます。 |
true |
-1 (true フラグ)。(真) |
uxxx |
符号なしの値、正の値 (32 ビット)。 |
virt |
仮想アドレス (ソフトウェアが使用するアドレス)。 |
waddr |
doublet (16 ビット) 境界のアドレス。 |
word wxxx |
doublet (16 ビット値、 - 32 ビットワードの下位 2 バイト)。 |
x x1 |
任意のスタック項目。 |
x.lo x.hi |
データ項目の最下位/最上位ビット |
xt |
実行トークン。 |
xxx? |
フラグ。名前は用途を示します (たとえば、 done? ok? error?)。 |
xyz-str xyz-len |
パックされない文字列のアドレスと長さ。 |
xyz-sys |
制御フロー用スタック項目。実装に依存します。 |
( C: -- ) |
コンパイルスタックダイアグラム。 |
( -- ) ( E: -- ) |
実行スタックダイアグラム。 |
( R: -- ) |
復帰スタックダイアグラム。 |