kolibrios-fun/programs/develop/SPForth/lib/include/tools.f
Kirill Lipatov (Leency) 09488af869 KolSPForth12 uploaded to SVN
git-svn-id: svn://kolibrios.org@4867 a494cfbc-eb01-0410-851d-a64ba20cac60
2014-04-21 19:22:58 +00:00

79 lines
2.8 KiB
Forth
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\ 94 TOOLS
: .S ( -- ) \ 94 TOOLS
\ Скопировать и показать значения, находящиеся на стеке данных. Формат зависит
\ от реализации.
\ .S может быть реализовано с использованием слов форматного преобразования
\ чисел. Соответственно, он может испортить перемещаемую область,
\ идентифицируемую #>.
DEPTH .SN
;
: ? ( a-addr -- ) \ 94 TOOLS
\ Показать значение, хранящееся по адресу a-addr.
\ ? может быть реализован с использованием слов форматного преобразования
\ чисел. Соответственно, он может испортить перемещаемую область,
\ идентифицируемую #>.
@ .
;
: AHEAD \ 94 TOOLS EXT
\ Интерпретация: семантика неопределена.
\ Компиляция: ( C: -- orig )
\ Положить место неразрешенной ссылки вперед orig на стек управления.
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
\ Семантика незавершена до тех пор, пока orig не разрешится (например,
\ по THEN).
\ Время выполнения: ( -- )
\ Продолжить выполнение с позиции, заданной разрешением orig.
HERE BRANCH, >MARK 2
; IMMEDIATE
: [ELSE] \ 94 TOOLS EXT
\ Компиляция: Выполнить семантику выполнения, данную ниже.
\ Выполнение: ( "<spaces>name..." -- )
\ Пропустить ведущие пробелы, выделить и отбросить ограниченные пробелами
\ слова из разбираемой области, включая вложенные [IF]...[THEN] и
\ [IF]...[ELSE]...[THEN], до выделения и отбрасывания слова [THEN].
\ Если разбираемая область опустошается, она снова заполняется по REFILL.
\ [ELSE] - слово немедленного исполнения.
1
BEGIN
NextWord DUP
IF
2DUP S" [IF]" COMPARE 0= IF 2DROP 1+ ELSE
2DUP S" [ELSE]" COMPARE 0= IF 2DROP 1- DUP IF 1+ THEN ELSE
S" [THEN]" COMPARE 0= IF 1- THEN
THEN THEN
ELSE 2DROP REFILL AND \ SOURCE TYPE
THEN DUP 0=
UNTIL DROP ; IMMEDIATE
: [IF] \ 94 TOOLS EXT
\ Компиляция: Выполнить семантику выполнения, данную ниже.
\ Выполнение: ( flag | flag "<spaces>name..." -- )
\ Если флаг "истина", ничего не делать. Иначе, пропустив ведущие пробелы,
\ выделять и отбрасывать ограниченные пробелами слова из разбираемой области,
\ включая вложенные [IF]...[THEN] и [IF]...[ELSE]...[THEN], до тех пор, пока не
\ будет выделено и отброшено слово [ELSE] или [THEN].
\ Если разбираемая область опустошается, она снова заполняется по REFILL.
\ [ELSE] - слово немедленного исполнения.
0= IF POSTPONE [ELSE] THEN
; IMMEDIATE
: [THEN] \ 94 TOOLS EXT
\ Компиляция: Выполнить семантику выполнения, данную ниже.
\ Выполнение: ( -- )
\ Ничего не делать. [THEN] - слово немедленного исполнения.
; IMMEDIATE
\ Ruvim Pinka additions:
: [DEFINED] ( -- f ) \ "name"
NextWord SFIND IF DROP TRUE ELSE 2DROP FALSE THEN
; IMMEDIATE
: [UNDEFINED] ( -- f ) \ "name"
POSTPONE [DEFINED] 0=
; IMMEDIATE