213b
<< <> >>

1. Eerst een voorbeeld

- In dit voorbeeld zijn de GATE-woorden gemarkeerd.
- Typ KWIT en de zaak gaat lopen. Je kunt KWIT weer verlaten door een fout te maken.
- Om niet in details te verzanden worden double numbers niet ondersteund.
: snumber ( a n -- x )  \ string -> single number
  over c@ [char] - =
  over 1 >      and >r  \ minteken?
  r@ if 1 /string then
  0 0 2swap >number
  nip or abort"  What's this? "
  r> if negate then ;

: ?stack depth 0< if -4 throw then ;

gate interpred
gate compiling
gate executing

== interpred
state @ -if- goto compiling
goto executing

== executing
bl word dup c@ 0= -if- drop ?stack ."  ok!" ready
find              -if- execute              goto interpred
count snumber
goto executing

== compiling
bl word dup c@ 0= -if- drop ?stack ."  ok?" ready
find s>d          -if- drop compile, goto compiling
( xt imm? )       -if- execute       goto interpred
count snumber postpone literal
goto compiling

: kwit begin interpred refill 0= until ;
>>