VOCABULARY

Материал из ПМК вики
Перейти к навигации Перейти к поиску

VOCABULARY — архаичное порождающее слово Каллисто.

VOCABULARY     ( −− )                               Определить следующее слово, как набор слов над набором CURRENT.

Порождающее слово VOCABULARY создаёт новый набор слов. Исполнение созданного слова делает соответствующий набор слов контекстом.

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

В режиме ЛАТ последовательно нажмите клавиши     5   С/П   ШГ←   В/О   3      ШГ←   ×    ,  

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

Слово из стандарта Forth 83. Было исключено из стандарта ANS Forth в пользу механизма ALSO/ONLY, который планируется к реализации в Каллисто 2.0

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

     VOCABULARY   --                            M,83
          A defining word executed in the form:
                  VOCABULARY <name>
          A dictionary entry for <name> is created which specifies a
          new ordered list of word definitions.  Subsequent execution
          of <name> replaces the first vocabulary in the search order
          with <name>.  When <name> becomes the compilation vocabulary
          new definitions will be appended to <name>'s list.     See:
          DEFINITIONS  "search order"

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

16.6.1.2460   WORDLIST                                                   SEARCH
           ( -- wid )
           Создает новый пустой список слов, возвращая его идентификатор 
           списка слов wid. Новый список слов может быть возвращен из пула 
           предварительно размещенных списков слов или может быть динамически 
           распределен в области данных. Система должна позволять создание, по 
           крайней мере, 8 новых списков слов в дополнение к любым 
           предоставленным как часть системы.

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

 VOCABULARY                                   208
     A defining word executed in the form:
          VOCABULARY  <name>
     to  create (in the CURRENT vocabulary) a dictionary entry  for
     <name>,   which   specifies  a  new  ordered  list   of   word
     definitions.   Subsequent execution of <name> will make it the
     CONTEXT   vocabulary.    When   <name>  becomes  the   CURRENT
     vocabulary (see DEFINITIONS), new definitions will be  created
     in that list.

     In lieu of any further specification, new vocabularies 'chain'
     to  FORTH.   That  is,  when  a dictionary  search  through  a
     vocabulary is exhausted, FORTH will be searched.

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

 VOCABULARY                                    E,L
        A defining word used in the form:
                     VOCABULARY cccc
        to create a vocabulary definition cccc. Subsequent use of cccc will
        make it the CONTEXT vocabulary which is searched first by INTERPRET.
        The sequence "cccc DEFINITIONS" will also make cccc the CURRENT
        vocabulary into which new definitions are placed.

        In fig-FORTH, cccc will be so chained as to include all definitions
        of the vocabulary in which cccc is itself defined. All vocabularys
        ultimately chain to Forth. By convention, vocabulary names are to be
        declared IMMEDIATE. See VOC-LINK.

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

3405 ;#VOCABULARY
3406 ; VOCABULARY       ( −− )                               Определить следующее слово, как набор слов над набором CURRENT.
3407 ; Порождающее слово, которое создаёт новые наборы слов. Исполнение созданного слова делает набор контекстом CONTEXT
3408 LVOCAB:         .DB     10
3409                 .TEXT   "VOCABULARY"
3410                 .DW     LIMMED
3411 VOCAB:          .DW CALL, BUILD, LITP
3412                 .DB 1,32
3413                 .DW COMMA, CURR,UAT, CFA, COMMA
3414                 .DW HERE, VOCLINK,UAT, COMMA, VOCLINK,STORE, DOESP
3415 DOVOC:          .DW TWOP, CONT,STORE, EXIT

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

: WORDLIST
  HERE VOC-LIST @ , VOC-LIST !
  HERE 0 , \ здесь будет указатель на имя последнего слова списка
       0 , \ здесь будет указатель на имя списка для именованых
       0 , \ wid словаря-предка
       0 , \ класс словаря = wid словаря, определяющего свойства данного
       0 , \ reserved, для расширений
;
: AT-WORDLIST-CREATING ( wid -- wid ) ... ;
…
: WORDLIST ( -- wid ) \ 94 SEARCH
\ Создает новый пустой список слов, возвращая его идентификатор wid.
\ Новый список слов может быть возвращен из предварительно распределенных 
\ списков слов или может динамически распределяться в пространстве данных.
\ Система должна допускать создание как минимум 8 новых списков слов в 
\ дополнение к имеющимся в системе.

  HERE VOC-LIST @ , VOC-LIST !
  HERE 0 , \ здесь будет указатель на имя последнего слова списка
       0 , \ здесь будет указатель на имя списка для именованых
       0 , \ wid словаря-предка
       0 , \ класс словаря = wid словаря, определяющего свойства данного
       0 , \ reserved, для расширений

  AT-WORDLIST-CREATING ( wid -- wid )
;
…
: VOCABULARY ( "<spaces>name" -- )
\ Создать список слов с именем name. Выполнение name заменит первый список
\ в порядке поиска на список с именем name.
  WORDLIST DUP
  CREATE
  ,
  LATEST OVER CELL+ ! ( ссылка на имя словаря )
  GET-CURRENT SWAP PAR! ( словарь-предок )
\  FORTH-WORDLIST SWAP CLASS! ( класс )
  VOC
  ( DOES> не работает в этом ЦК)
  (DOES1) (DOES2) \ так сделал бы DOES>, определенный выше
  @ CONTEXT !
;

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

Юрий Семёнов приводит следующее определение определяющего слова VOCABULARY (стр. 79):

 : VOCABULARY   <BUILDS     ( формирование нового имени в словаре)
                '120201 ,            ( имитатор заголовка [PFA+2])
                CURRENT @ CFA ,    ( ссылка на последнее описанное
                                     слово)
                HERE VOC-LINK @ ,             ( ссылка на словарь-
                                                 "прародитель")
                VOC-LINK !        ( коррекция переменной VOC-LINK)
                DOES>              ( запись PFA словаря в стек при
                                     исполнении)
                2+ CONTEXT ! ;    ( CONTEXT указывает на выбранный
                                    словарь)

У Баранова-Ноздрунова определение слова VOCABULARY выглядит так (стр. 64):

: VOCABULARY  ( ---> )   CREATE
    256  BL  +  ,  CONTEXT  @  2-  ,
    HERE  VOC-LINK  @  ,  VOC-LINK  !
  DOES>  ( A ---> )  2+  CONTEXT  !  ;

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

VOCABULARY   -> ОПРЕДЕЛИТЬ СЛЕДУЮЩЕЕ СЛОВО КАК                 33
             СПИСОК НАД ТЕКУЩИМ ЗНАЧЕНИЕМ "CURRENT"
VOCABULARY# А   НАЧАЛО ИСПОЛНИТЕЛЬНОЙ ЧАСТИ "VOCABULARY"       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# ( ВХОД В СПИСОК СПИСКОВ СТАТЕЙ)
: VOCABULARY ( -> )  CREATE [ &DWORD ] LITERAL ,
   LIT [ FORTH# ]  CONTEXT @ - IF CONTEXT @ 2-  ELSE 0 THEN ,
  HERE VOC- LINK @ , VOC-LINK ! DOES>
    [ THERE  4 - :A:  VOCABULARY#  ] 2+ CONTEXT ! ;

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

             HEAD    212Q,'VOCABULAR',331Q,VOCAB,$COL     ; VOCABULARY
             DW  BUILD,LIT,120201Q,COMMA,CURR,AT,CFA,COMMA
             DW  HERE,VOCL,AT,COMMA,VOCL,STORE,DOES
   DOVOC     LABEL    FAR
             DW  TWOP,CONT,STORE,SEMI

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


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


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