FORTH

Материал из ПМК вики
Версия от 14:46, 30 июня 2021; AtH (обсуждение | вклад) (→‎Реализация)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

FORTH (Форт) — стандартное слово Каллисто.

FORTH          ( −− )                               Сделать набор слов FORTH контекстным.

Слово FORTH делает одноимённый набор слов контекстным.

Ввод слова FORTH[править]

В режиме ЛАТ последовательно нажмите клавиши  П   5   ×   2   ПП 

FORTH и FORTH-WORDLIST в стандарте ANS Forth[править]

 16.6.2.1590   FORTH                                                  SEARCH EXT
            ( -- )
            Преобразует порядок поиска, состоящий из widn, ... wid2, wid1 (где 
            wid1 просматривается первым) в widn, ... wid2, wid FORTH-WORDLIST.

 16.6.1.1595   FORTH-WORDLIST                                             SEARCH
            ( -- wid )
            Возвращает wid, идентификатор списка слов, который включает все 
            стандартные слова, предоставленные реализацией. Этот список слов - 
            первоначально список слов компиляции и - часть начального порядка 
            поиска.

История[править]

Начиная с Форта-83, слово FORTH больше не имеет признака немедленного исполнения. При переводе определений слов с fig-Форта и Форта-79, используйте последовательность [ FORTH ]

FORTH в предыдущем стандарте Forth-83 (англ.)[править]

      FORTH        --                            83
           The name of the primary vocabulary.  Execution replaces the
           first vocabulary in the search order with FORTH .  FORTH is
           initially the compilation vocabulary and the first
           vocabulary in the search order.  New definitions become part
           of the FORTH vocabulary until a different compilation
           vocabulary is established.  See:  VOCABULARY

      FORTH        --                            ONLY
           The name of the primary vocabulary.  Execution makes FORTH
           the transient vocabulary, the first in the search order, and
           thus replaces the previous transient vocabulary.

FORTH в стандарте Forth-79 (англ.)[править]

FORTH                                        I,187
    The name of the primary vocabulary.  Execution makes FORTH the
    CONTEXT  vocabulary.   New  definitions become a part  of  the
    FORTH  until  a differing CURRENT vocabulary  is  established.
    User  vocabularies  conclude by 'chaining'  to  FORTH,  so  it
    should  be  considered that FORTH is 'contained'  within  each
    user's vocabulary.

FORTH в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

FORTH                                         P,L1
       The name of the primary vocabulary.
       Execution makes FORTH the CONTEXT vocabulary. Until additional user
       vocabularies are defined, new user definitions become a part of
       FORTH. FORTH is immediate, so it will execute during the creation of
       a colon-definition, to select this vocabulary at compile time.

Реализация[править]

В Каллисто 1.0 слово FORTH находится в памяти данных, куда его переносит из своего поля данных слово COLD:

 455 ; Эти две статьи (27 байт) COLD переносит в словарь в области двоичных регистров
 456 ; Их поле данных сможет меняться
 457 ;
 458 ;#FORTH
 459 ; FORTH            ( −− )                               Сделать набор слов FORTH контекстным.
 460 ; LFORTH:
 461                 .DB     5                       ; 11143 = 2b87 = LFORTH:
 462                 .TEXT   "FORTH"                 ; 11144:
 463                 .DW     LLOADQ                  ; 11149:
 464                 .DW     SDOEP                   ; 11151 = 2b8f = FORTH: (xt)
 465                 .DW DOVOC                       ; 11153: Обработчик VOCABULARY для DOES>
 466                 .DB 1,20H                       ; 11155: псевдозаголовок первого слова
 467                 .DB 2bH,99H                     ; 11157: ссылка на LTASK в новой адресации
 468 
 469                                                 ; Этим адресом инициализируется VOC−LINK
 470                 .DW     0                       ; 11159 = 2b97 = XVOC: Это должно быть уже в байтовой памяти

Реализация из SP-Forth 4.20:

WORDLIST VALUE FORTH-WORDLIST  ( -- wid ) \ 94 SEARCH
\ Возвратить wid - идентификатор списка слов, включающего все стандартные 
\ слова, обеспечиваемые реализацией. Этот список слов изначально список 
\ компиляции и часть начального порядка поиска.
…
: FORTH ( -- ) \ 94 SEARCH EXT
\ Преобразовать порядок поиска, состоящий из widn, ...wid2, wid1 (где wid1 
\ просматривается первым) в widn,... wid2, widFORTH-WORDLIST.
  FORTH-WORDLIST CONTEXT !
;

Советская реализация[править]

Описание и определение слова FORTH в ядре ФОРТ-ЕС:

FORTH     -> УСТАНОВИТЬ "CONTEXT" НА НАЧАЛЬНЫЙ СПИСОК           33
FORTH#  A  PFA+2 ДЛЯ СЛОВАРНОЙ СТАТЬИ "FORTH"                   33

                     Экран номер 33
( 09.09.86    FORTH FORTH# FL# VOC-LINK VOCABULARY VOCABULARY#)

VOC FORTH   &DWORD  H,                         ( FORTH-83)
A: FORTH#  LASTWORD  ( ВХОД В СПИСОК СЛОВАРНЫХ СТАТЕЙ)
A: FL# 0 Н,  ( ПОЛЕ СВЯЗИ ДЛЯ СПИСКОВ СТАТЕЙ)
CREATE VOC-LINK FL# ( ВХОД В СПИСОК СПИСКОВ СТАТЕЙ)

Определение слова FORTH в FORTH ИТЭФ:

             HEAD    305Q,'FORT',310Q,FORTH,$DOE          ; FORTH
             DW  DOVOC,120201Q,TASK-7
   XVOC      LABEL   FAR
             DW  0

colorForth (cf2019.nasm 2019 Sep 14)[править]

sdefine:
    pop dword [ adefine ]
    ret
…

forth:      ; select the Forth wordlist
    call sdefine
forthd:
    push _TOS_
    mov ecx, [ v_ForthWordCount ]
    inc dword [ v_ForthWordCount ]
    lea ecx, [ ( ecx * 4 ) + ForthNames ]
    mov _TOS_, ( ForthJumpTable - ForthNames )
forthdd:
    mov edx, [ ( edi * 4 ) - 0x04 ]
    and edx, byte -0x10
    mov [ecx], edx
    mov edx, [ v_H ]
    mov [ecx+_TOS_], edx
    lea edx, [ecx+_TOS_]
    shr edx, 0x02
    mov [ v_last ], edx
    pop _TOS_
    mov [ list ], esp
    mov dword [ lit ], adup
    test dword [ class ], -1
    jz .fthd
    jmp dword [ class ]
.fthd:
    ret

Ссылки[править]


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.