以下のワード群は通常、 インタープリター状態で使用されます。 通常は、 ソース・ファイルのどの部分がテキスト・インタープリターによって処理されるかを制御します。 これらは、 標準 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 に設定します。 行の残りの部分を消費します。