認識器(recognizer)は、 あなたが文字列を渡すワードです。 認識器が文字列を認識すると、 通常はデータとそのデータを処理するためのワードの
xt を返します。 このワードはトランスレーター(translator)と呼ばれます。 認識器が文字列を認識しない場合は、
notfound
の xt を返します。
すべての認識器(recognizers)のスタック効果は ( c-addr u – ... xt ) です。
認識器は文字列を受け取り、 いくつかのデータと、 そのデータを通訳(interpret)するためのトランスレーター(翻訳器)を返します。 Gforth
はそのトランスレーターを xt として実装します(これを実行すると、 現在の state でその文字列を処理する適切なアクションが実行されます)。
しかし、 他の Forth システムでは、 内部に 3 つの xt を含む実際のテーブルとして実装する可能性があります。 最初の xt は
通訳時(interpretation)/実行時(run-time) xt で、 データのインタープリター機能(interpretation
semantics)を実行します(通常はデータをスタックに置くだけです)。 2 番目の xt はコンパイル機能(compilation
semantics)を実行し、 データと実行時機能(run-time semantics)の xt を取得します。 3 番目の xt は
postpone 機能(postpone semantics)を実行し、 データと実行時機能の xt も取得します。 >postpone
を使用すると、 実行時機能の xt を postpone できます。
認識器群はスタックとして編成されるため、 ボキャブラリー・スタックと同じ方法で認識器群のシーケンスを配置できます。 認識器スタックはそれ自体が認識器群です。 つまり、 認識器スタックは実行可能であり、 文字列を受け取り、 トランスレーターを返します。
notfound
( state – ) gforth-experimental “notfound”
認識器の認識が失敗すると、 notfound
の認識器トークン(訳注: 現状では notfound
の xt )を返します
rec-nt
( addr u – nt translate-nt | notfound ) gforth-experimental “rec-nt”
名前トークンを認識します
rec-num
( addr u – n/d table | notfound ) gforth-experimental “rec-num”
数値を 1倍長/2倍長 整数に変換します
rec-float
( addr u – r translate-float | notfound ) gforth-experimental “rec-float”
浮動小数点数を認識します
rec-string
( addr u – addr u’ r:string | rectype-null ) gforth-experimental “rec-string”
二重引用符(double quotes)で囲まれた文字列(strings)を文字列リテラルに変換します。 エスケープは S\"
と同様に扱われます。
rec-to
( addr u – xt n r:to | rectype-null ) gforth-experimental “rec-to”
->
で始まるワードは、 TO
が前にあるものとして扱い、 +>
で始まるワードは +TO
が前にあるものとして扱い、 '>
で始まるワードは ADDR
が前にあるものとして扱い、 @>
で始まるワードは ACTION-OF
が前にあるものとして扱い、 =>
で始まるワードは IS
が前にあるものとして扱います。
rec-tick
( addr u – xt rectype-num | rectype-null ) gforth-experimental “rec-tick”
`
(バッククォート)の接頭辞が付いたワードはその xt を返します。 例: `dup
は dup の xt を返します
rec-dtick
( addr u – nt rectype-num | rectype-null ) gforth-experimental “rec-dtick”
``
(バッククォート2つ)で始まるワードは、 その nt を返します。 例: ``S"
は S"
の nt
を返します。
rec-body
( addr u – xt translate-tick | translate-null ) gforth-experimental “rec-body”
'<'
'>'
で囲まれたワードはその本体(body)を返します。 例: <dup>
は dup
の本体(body)を返します
get-recognizers
( – xt1 .. xtn n ) gforth-experimental “get-recognizers”
認識器スタックの内容(content)をスタックにプッシュします。 n は xt の個数です。
set-recognizers
( xt1 .. xtn n – ) gforth-experimental “set-recognizers”
スタック上の内容(content)を認識器スタックに設定します。 n は xt の個数です。
recognize
( addr u rec-addr – ... rectype ) gforth-experimental “recognize”
訳注: 認識器スタック rec-addr の認識器を順に文字列 addr u に適用し、 認識したら、 そのトランスレーター
rectype (の xt ) を得ます。 何も適用できなかった場合はトランスレーター notfound
(の xt )を返します
recognizer-sequence:
( xt1 .. xtn n "name" – ) gforth-experimental “recognizer-sequence:”
訳注: xt1 .. xtn n という内容で "name" という名前の認識器スタックを作成します。
forth-recognize
( c-addr u – ... translate-xt ) recognizer “forth-recognize”
システム認識器スタックです。
forth-recognizer
( – xt ) gforth-experimental “forth-recognizer”
Matthias Trute recognizer API との下位互換性があります。 この構造は、 defer されたワードを value のようなワードに変換します。
set-forth-recognize
( xt – ) recognizer “set-forth-recognize”
システム認識器スタックを変更する
translate:
( int-xt comp-xt post-xt "name" – ) gforth-experimental “translate:”
name という名前のトランスレーター(トランスレーター・テーブル)を作成し、 トランスレーターのインタプリンタ機能アクション int-xt と、 トランスレーターのコンパイル機能アクション comp-xt と、 トランスレーターの postpone 機能アクション post-xt を格納します。 加えて拡張機能(extensions)用に 7 つのスロットを用意します(拡張機能スロット初期値は no.extensions の xt で埋めます)。 実行時: name の 実行時は state の値に応じてアクションが実行されます。 state が 0 (インタプリンタ状態)ならばインタプリンタ機能アクションを実行し、 stete が -1 (コンパイル状態) ならばコンパイル機能アクションを実行し、 state が -2 (通常無い値。このために特別にセットする。アクション実行後は以前の値復元の事) ならばpostpone 機能アクションを実行します。
translate-nt
( i*x nt – j*x ) gforth-experimental “translate-nt”
名前トークンのトランスレーター
translate-num
( x – | x ) gforth-experimental “translate-num”
数値のトランスレーター
translate-dnum
( dx – | dx ) gforth-experimental “translate-dnum”
2倍長整数のトランスレーター
doc-translate-float(訳注: まだ説明書いて無いっぽい)
try-recognize
( addr u xt – results | false ) gforth-experimental “try-recognize”
入れ子(nested)になった認識器(recognizers)用です: addr u の認識を試み、 xt を実行して結果が望ましいかどうかを確認します。 xt が false を返した場合は、 認識器の副作用をすべてクリーンアップして false を返します。 それ以外の場合は、 xt 呼び出しの結果をスタックに返し、 そのTOSはゼロ以外でなければなりません。
>interpret
( translator – ) gforth-experimental “>interpret”
指定のトランスレーターのインタプリンタ機能アクションを実行します。
>compile
( translator – ) gforth-experimental “>compile”
指定のトランスレーターのコンパイル機能アクションを実行します。
>postpone
( translator – ) gforth-experimental “>postpone”
指定のトランスレーターの postpone 機能アクションを実行します
translate-method:
( "name" – ) gforth-experimental “translate-method:”
新しいトランスレーター・メソッドを作成し、 トランスレーター・テーブルを拡張します。 xt rectype to
translator を使用して、 xt を既存のrectypeに割り当てることができます(訳注: >interpret
や
>compile
や >postpone
定義用。 あなたが更に トランスレーター・メソッドを定義した場合はこれ以降の新規
state 値に対するアクションとなる。 現時点で 7 つまで追加可能)
translate-state
( xt – ) gforth-experimental “translate-state”
xt として渡された translate-method に一致するトランスレーターのアクションを実行するように、 システムの現在の state を変更します。