Next: , Previous: , Up: The Text Interpreter   [Contents][Index]


6.14.4 Interpreter Directives

以下のワード群は通常、 インタプリタ状態で使用されます。 通常は、 ソース・ファイルのどの部分がテキスト・インタプリタによって処理されるかを制御します。 これらは、 標準 Forth のワードには少数しかありませんが、 Gforth では、 非即実行バージョンがコンパイル状態でのみ使用できるという事実を補うために、 豊富な即実行制御構造ワードのセットでこれらを補っています(see Control Structures)。 一般的な使用法は以下のとおりです:

[undefined] \G [if]
  : \G ... ; immediate
[endif]

これは、 システムが \G を定義していない場合は、 幾つかの置き換えプログラムをコンパイルします(機能が制限される可能性があります)。

[IF] ( flag –  ) tools-ext “bracket-if”

flag が TRUE の場合は何もしません(したがって、 後続のワードは通常どおり実行されます)。 flag が FALSE の場合、 対になる [ELSE] または [THEN] がパースされて破棄されるまで、 [IF].. [ELSE].. [THEN][IF].. [THEN] の入れ子になったモノを含むパース領域(入力バッファー/パース領域 は、 必要に応じて REFILL を使用して再充填します)からワードをパースして破棄します。 即実行ワードです。

[ELSE] ( ) tools-ext “bracket-else”

対になる [THEN] がパースされて破棄されるまで、 [IF].. [ELSE].. [THEN][IF].. [THEN] の入れ子になったモノを含むパース領域(入力バッファー/パース領域 は、 必要に応じて REFILL を使用して再充填します)からワードをパースして破棄します。 FALSE の場合、[IF][ELSE] をパースして破棄し、後続のワードは通常どおり実行されたままになります。 即実行ワードです。

[THEN] ( ) tools-ext “bracket-then”

何もしない。 パースして破棄する他のワードのマーカーとして使用されます。 即実行ワードです。

[ENDIF] ( ) gforth-0.2 “bracket-end-if”

何もしません。 [THEN] の同義語(synonym)です。

[defined] ( "<spaces>name" – flag  ) tools-ext “bracket-defined”

現在の検索順序スタック(the search order)で名前が見つかった場合は true を返します

[undefined] ( "<spaces>name" – flag  ) tools-ext “bracket-undefined”

現在の検索順序スタック(the search order)で名前が見つかった場合は false を返します

[IFDEF] ( "<spaces>name" –  ) gforth-0.2 “bracket-if-def”

現在の検索順序スタック(the search order)で name が見つかった場合は、 TRUE フラグを伴った [IF] のように振る舞いし、 そうでない場合は、 FALSE フラグを伴った [IF] のように動作します。 即実行ワードです。

[IFUNDEF] ( "<spaces>name" –  ) gforth-0.2 “bracket-if-un-def”

現在の検索順序スタック(the search order)で name が見つからない場合は、 TRUE フラグを伴った [IF] のように動作し、 それ以外の場合は、FALSE フラグを伴った [IF] のように動作します。 即実行ワード。

[?DO] ( n-limit n-index –  ) gforth-0.2 “bracket-question-do”
[DO] ( n-limit n-index –  ) gforth-0.2 “bracket-do”
[LOOP] ( ) gforth-0.2 “bracket-loop”
[+LOOP] ( n –  ) gforth-0.2 “bracket-question-plus-loop”
[FOR] ( n –  ) gforth-0.2 “bracket-for”
[NEXT] ( n –  ) gforth-0.2 “bracket-next”
[I] ( run-time – n  ) gforth-0.2 “bracket-i”

実行時、 [I] はテキスト・インタプリタ時の [do] の反復(iteration)のループ・インデックスをプッシュします。 インタプリタ時にインデックスを処理したい場合は、 [I] を対話的に通訳(interpret)するか、 または INT-[I] を使用します。

INT-[I] ( – n  ) gforth-1.0 “int-bracket-i”

テキスト・インタプリタ時に [do] 反復のループ・インデックスをプッシュします。

[BEGIN] ( ) gforth-0.2 “bracket-begin”
[UNTIL] ( flag –  ) gforth-0.2 “bracket-until”
[AGAIN] ( ) gforth-0.2 “bracket-again”
[WHILE] ( flag –  ) gforth-0.2 “bracket-while”
[REPEAT] ( ) gforth-0.2 “bracket-repeat”

#line を使用すると、 現在のソース行番号とソース・ファイルに関する Gforth の認識を変更できます。 これは、 Forth ファイルが他のソース・コード・ファイルから生成されており、 たとえば、 オリジナルのソース・コードを参照するエラー・メッセージなどを取得したい場合に便利です。 その場合、 Forth コード・ジェネレーターは、 必要に応じて Forth コードに #line 行を挿入する必要があります。

#line ( "u" "["file"]" –  ) gforth-1.0 “#line”

行番号を u に設定し、 (存在する場合)ファイル名を file に設定します。 行の残りの部分を消費します。


Next: Recognizers, Previous: Interpret/Compile states, Up: The Text Interpreter   [Contents][Index]