rust-forth-tokenizer 0.2.1

A Forth tokenizer written in Rust.
Documentation
\ @(#) $M$ 98/01/26 1.2
\ standard { v0 v1 ... vn | l0 l1 .. lm -- } syntax
\ based on ANSI basis words (LOCAL) and TO
\
\ Author: Phil Burk
\ Copyright 1994 3DO, Phil Burk, Larry Polansky, David Rosenboom
\
\ The pForth software code is dedicated to the public domain,
\ and any third party may reproduce, distribute and modify
\ the pForth software code or any derivative works thereof
\ without any compensation or license.  The pForth software
\ code is provided on an "as is" basis without any warranty
\ of any kind, including, without limitation, the implied
\ warranties of merchantability and fitness for a particular
\ purpose and their equivalents under the laws of any jurisdiction.

\ MOD: PLB 2/11/00 Allow EOL and \ between { }.

anew task-locals.fth

private{
variable loc-temp-mode    \ if true, declaring temporary variables
variable loc-comment-mode \ if true, in comment section
variable loc-done
}private

: { ( <local-declaration}> -- )
    loc-done off
    loc-temp-mode off
    loc-comment-mode off
    BEGIN
        bl word count
        dup 0>           \ make sure we are not at the end of a line
        IF
            over c@
            CASE
    \ handle special characters
            ascii }  OF  loc-done on          2drop  ENDOF
            ascii |  OF  loc-temp-mode on     2drop  ENDOF
            ascii -  OF  loc-comment-mode on  2drop  ENDOF
            ascii )  OF  ." { ... ) imbalance!" cr abort  ENDOF
            ascii \  OF  postpone \  2drop ENDOF   \ Forth comment

    \ process name
            >r  ( save char )
            ( addr len )
            loc-comment-mode @
            IF
                2drop
            ELSE
    \ if in temporary mode, assign local var = 0
                loc-temp-mode @
                IF compile false
                THEN
    \ otherwise take value from stack
                (local)
            THEN
            r>
            ENDCASE
        ELSE
            2drop refill 0= abort" End of input while defining local variables!"
        THEN
        loc-done @
    UNTIL
    0 0 (local)
; immediate

privatize

\ tests
: tlv1  { n -- }  n  dup n *  dup n *  ;

: tlv2 { v1 v2 | l1 l2 -- }
    v1 . v2 . cr
    v1 v2 + -> l1
    l1 . l2 . cr
;