標準の Forth テキスト・インタープリターは、 検索順序スタック(the search order)内のワード(rec-nt
) と、
整数(rec-num
)と、 浮動小数点数(rec-float
)を認識します。 デフォルトでは、 Gforth は
以下の構文も認識します
"mystring"
(rec-string
)
0e+1ei
(rec-complex
)
->myvalue
(rec-to
)
`dup
(rec-tick
)
``mysynonym
(rec-dtick
)
<myarray+8>
(rec-body
)
${HOME}
(rec-env
)
myvoc1:myvoc2:myword
(rec-scope
)
?
というプレフィックスが付いたワードは、 rec-
recognizer によって処理され、 認識器の曖昧さを排除します。 例:
hex num?cafe num?add
rec-num としてのみパースさせる、 float?1.
rec-floatとしてパースさせる)(rec-meta
)
locate
(see Locating source code definitions) を使用して、 ソース・コードの一片を、
どの認識器(recognizer)が認識するか調べられます。 例:
defer mydefer locate ->mydefer
これは rec-to
が ->mydefer
を認識したことを示すハズです。 ただし、
認識器がディクショナリーのワードを認識する場合(スコープ認識機能など)、 locate はそのワードを表示します。
以下を使用すると、 使用されている認識器と認識器の順序を確認できます
.recognizers
( – ) gforth-experimental “dot-recognizers”
(.order とは異なり、)最初に検索された認識器を左端にして、 現在の認識器の順序を出力します。 すべての認識器に共通のプレフィックスである
rec-
の代わりに、 反転表示の ~
が表示されます。
通常、 認識器は、 他の認識器と同一の文字列との一致を避けるように設計されています。 たとえば、rec-env
(環境変数認識器)には、
$ADD
のような入力文字列の数値認識器との競合を避けるために波括弧(braces;{})が必要です。 ただし、
このポリシーにはいくつかの例外があります:
ただし、 名前は 0
(ゼロ)で始まらない傾向がある(そして 0
(ゼロ)
で始まる場合は特殊文字が含まれる傾向がある)ため、 base が hex
の場合は、 数値を 0
(ゼロ)で始めることをお勧めします。
これまで私たちが見てきた幾多のコードでは、 ワードを '
(クォート。 別名ティック)で始める方が、 `
(バック・クォート。別名バック・ティック) で始めるよりもはるかに一般的であるため、 xt と nt の認識器は `
(バック・クォート)を使用して競合を減らしてください。
rec-num
と、 浮動小数点認識器 rec-float
は、 どちらも、 たとえば 1.
を認識します。 しかし、 rec-num
が(デフォルトでは)先にあるため、 1.
は2倍長セルの整数として認識されます。
rec-float
を最初に使用するように認識順序を変更すると、 1.
は浮動小数点数として認識されますが、 標準
Forth で書かれたコードを読み込むと、 非標準的な振る舞いになる可能性があります。
いずれの場合も、 以下のようにして、 あなた独自のコード内では、 この競合を回避することをお勧めします。 つまり、
常に数値プレフィックスを付けて2倍長セル整数を記述します(例: #1.
)。 また、 浮動小数点数は常に e
を使用して記述します(例: 1e
)。
->
で始まるワードをいくつか見てきました。 to myvalue
または to?->myvalue
(訳注: rec-meta 構文で rec-to を指定の上で ->myvalue を評価)を使用すると競合を回避できます(後者は
postpone
で機能します)。