Next: , Previous: , Up: Recognizers   [Contents][Index]


6.14.5.2 Dealing with existing Recognizers

認識器(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 を変更します。


Next: Defining Recognizers, Previous: Default Recognizers, Up: Recognizers   [Contents][Index]