interpretive
Standard Forth support for words with special interpretation and compilation semantics
- raw README.md
 - raw example-ascii.fs
 - raw example-dot-quote.fs
 - raw example-s-quote.fs
 - raw example-tick.fs
 - raw example-val-to.fs
 - raw interpretive.fs
 - raw mit-license
 - raw package.4th
 
\ Have interpretive words as to avoid state smartness                                                       uh 2018-05-13
\ Provide the ability to define interactive words that are only found while the system is in interpretation mode.
\ This allows to define words that have divergent interpretation and compilation semantics to support the interpreter/compiler
\ copy&paste paradigm.
\
\ Usage Example:
\
\ Finding the execution token of a word ("ticking") in interpretation mode or in compilation mode with the same notation,
\ e.g.:
\
\ VARIABLE output    xt-of EMIT output ! 
\ : silent-output ( -- )  xt-of DROP  output ! ;
\
\ can be defined like this:
\
\ interpretive{
\
\   : xt-of ( <name> -- xt ) ' ;
\
\ }interpretive
\
\ : xt-of ( <name> -- )  POSTPONE ['] ; IMMEDIATE
\ -----------------------------------------------------------------------------------------------------------------------
\ Standard conformant labeling:
\ 
\ This is an ANS Forth Program with environmental dependencies, 
\    - Requiring ] [ VARIABLE THEN SWAP R> POSTPONE OVER IMMEDIATE IF DUP CR @ >R = ; : 1- 1+ 0= ! EVALUATE ( 
\        from the Core word set.
\    - Requiring NIP :NONAME .( \ from the Core Extensions word set.
\    - Requiring WORDS from the Programming-Tools word set.
\    - Requiring ;CODE from the Programming-Tools Extensions word set.
\    - Requiring WORDLIST SET-ORDER SET-CURRENT GET-ORDER GET-CURRENT from the Search-Order word set.
\ 
\ Required program documentation:
\ 
\    - Environmental dependencies
\      * This program has no known environmental dependencies.
\ 
\    - Other program documentation:
\      * After loading this program, a Standard System does no longer exist:
\           * in interpretation mode the first element in the search order is a word list with interactive words. 
\             Names in this wordlist are found first. In compilation mode, this wordlist is not the first wordlist 
\             in the search order so that ordinary definitions are found during compilation. Thus
\           * changing compilation state (by the words : ; ABORT QUIT :NONAME [ ]) also changes the search order,   
\             especially : changes the search order in contrast to the standardized behaviour of : in 6.1.0450. 
\             See also annex A.6.1.0450
\           * WORDS no longer displays the name of the first word list in the search order but avoids displaying
\             the interpretive word list.
\ -----------------------------------------------------------------------------------------------------------------------
\        0         0         0         0         0         0         0         0         0          1         1         1
\        1         2         3         4         5         6         7         8         9          0         1         2
\ 34567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890012345678901234567890
\ Where the interative words go
VARIABLE interpretive-wordlist   WORDLIST interpretive-wordlist !
: interpretive ( -- )
    GET-ORDER interpretive-wordlist @ SWAP 1+ SET-ORDER ;
: interpretive? ( -- f )
    GET-ORDER DUP IF  OVER interpretive-wordlist @ = >R SET-ORDER R>  THEN ;
: +interpretive ( -- )
    interpretive? 0= IF interpretive THEN ;
: -interpretive ( -- )
    interpretive? IF GET-ORDER NIP 1- SET-ORDER THEN ;
: interpretive{ ( -- wid )
    GET-CURRENT  interpretive-wordlist @ SET-CURRENT ;  
: }interpretive ( wid -- )
    SET-CURRENT ;
\ Make interpretive play with standard words that enter compilation and interpretation state
\ Redefine all Forth94 standard words that can change STATE, c.v 6.1.2250 and 15.6.2250
: [ ( -- )
    POSTPONE [  +interpretive ; IMMEDIATE
: ] ( -- )
    -interpretive ] ;
: : ( <name> -- )
    : -interpretive ;
: ; ( -- )
    POSTPONE ; +interpretive ; IMMEDIATE
: :NONAME ( -- xt )
    :NONAME -interpretive ;
: ;CODE ( -- )
    POSTPONE ;CODE +interpretive ; IMMEDIATE
: WORDS ( -- )
    GET-ORDER -interpretive WORDS SET-ORDER ;
: EVALUATE ( i*x c-addr u -- j*x )
   interpretive? >R +interpretive EVALUATE R> 0= IF -interpretive THEN ;
: ABORT ( -- )
   +interpretive ABORT ;
   
: ABORT" ( <ccc>" f -- )
   POSTPONE IF  [CHAR] " PARSE   POSTPONE SLITERAL  POSTPONE TYPE  POSTPONE ABORT  POSTPONE THEN ; IMMEDIATE
: QUIT ( -- )
   +interpretive QUIT ;
+interpretive
cr .( ready to define interpretive words )
cr .( usage: )
cr .(    interpretive{ )
cr .(      <interpretive_defintions> )
cr .(    }interpretive )
cr
              by UlrichHoffmann
Versions
Tags
ansforth94, forth-94, forth94, ndcs, special, interpretationsemantics, compilationsemantics
Dependencies
None
Dependents
None