6.1.1 Eval escapes

eval-escape 内の text は、 Vmgen が行を読み取るときに評価(eval)される Forth コードです。 通常、 この機能を使用してスタックと型を定義します。

あなたが Forth を知らない (そして学びたくない) 場合は、 以下の文法に従って text を作成できます。 これらのルールは通常、 Vmgen を使用するために必要な Forth の全てです:

text: stack-decl|type-prefix-decl|stack-prefix-decl|set-flag

stack-decl: 'stack ' ident ident ident
type-prefix-decl: 
    's" ' string '" ' ('single'|'double') ident 'type-prefix' ident
stack-prefix-decl:  ident 'stack-prefix' string
set-flag: ('store-optimization'|'include-skipped-insts') ('on'|'off')

このコードの構文は完全にはチェックされていないことに注意してください(eval-escape で記述できる Forth プログラムの断片は他にも多数あります)。

スタック・プレフィックスには文字または数字または ‘:’ を含めることができ、‘#’ で始まる場合もあります。 たとえば、Gforth では、 リターン・スタックにはスタック・プレフィックス ‘R:’ が付きます。 この制限は、 スタック・プレフィックスの定義ではチェックされませんが、 後でスタック項目のパース・ルールによって強制されます。

あなたが既に Forth をご存知の場合、 関連する非標準ワードのスタック効果は以下のとおりです:

stack                 ( "name" "pointer" "type" -- )
                      ( name execution: -- stack )
type-prefix           ( addr u item-size stack "prefix" -- )
single                ( -- item-size )
double                ( -- item-size )
stack-prefix          ( stack "prefix" -- )
store-optimization    ( -- addr )
include-skipped-insts ( -- addr )

item-size はスタック上で 3 つのセルを占有します。