Слово ∶

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

: (двоеточие) — стандартное порождающее слово Каллисто.

Начать определение слова через двоеточие.

Ввод слова :

В режиме NUM нажмите чёрную клавишу  В/О 

: в стандарте ANS Forth

6.1.0450   :                                  "colon"                      CORE
           ( C: "<spaces>name" -- colon-sys )
           Пропускает ведущие разделители пробелы. Выделяет name, ограниченное 
           пробелом. Создает определение для name, называемое "определение 
           через двоеточие". Вводит состояние компиляции и начинает текущее 
           определение, создавая colon-sys. Добавляет семантику инициирования, 
           данную ниже к текущему определению.
           Семантика выполнения name будет определяться скомпилированными в 
           тело определения словами. Текущее определение не должно быть 
           находимым в словаре, пока оно не закончено (или до выполнения DOES> 
           в некоторых системах).
       Инициирование: ( i*x -- i*x )  ( R:  -- nest-sys )
           Сохраняет зависящую-от-реализации информацию nest-sys о вызове 
           определения. Состояние стека i*x, представляет параметры для name.
       name Выполнение: ( i*x -- j*x )
           Выполняет name определения. Состояние стека i*x, и j*x представляет 
           параметры и результаты из name, соответственно.
       См.: 3.4 Интерпретатор текста Forth, 3.4.1 Синтаксический анализ, 
           3.4.5 Компиляция, 6.1.1250 DOES>, 6.1.2500 [, 6.1.2540 ], 
           15.6.2.0470 ;CODE.
A.6.1.0450   :
Типичное использование:
       : name ... ;
В Forth 83 это слово было определено для изменения порядка поиска. Эта 
спецификация явно удалена в этом Стандарте. Мы полагаем, что в большинстве 
случаев это не имеет никакого эффекта; однако системы, которые разрешают много 
порядков поиска, нашли Forth-83 поведение двоеточия очень нежелательным.
Заметьте, что двоеточие самостоятельно не вызывает компилятор. Двоеточие 
устанавливает состояние компиляции так, чтобы более поздние слова в области 
анализа были откомпилированы.


: в предыдущем стандарте Forth-83 (англ.)

     :            -- sys                        M,79           "colon"
          A defining word executed in the form:
                  : <name> ... ;
          Create a word definition for <name> in the compilation
          vocabulary and set compilation state.  The search order is
          changed so that the first vocabulary in the search order is
          replaced by the compilation vocabulary.  The compilation
          vocabulary is unchanged.  The text from the input stream is
          subsequently compiled.  <name> is called a "colon
          definition".  The newly created word definition for <name>
          cannot be found in the dictionary until the corresponding ;
          or ;CODE is successfully processed.
          An error condition exists if a word is not found and cannot
          be converted to a number or if, during compilation from mass
          storage, the input stream is exhausted before encountering ;
          or ;CODE .  sys is balanced with its corresponding ; .  See:
          "compilation"  "9.4 Compilation"


: в стандарте Forth-79 (англ.)

:                                            116            "colon"
    A defining word executed in the form:
         :  <name>  ...  ;
    Select  the  CONTEXT  vocabulary to be identical  to  CURRENT.
    Create  a  dictionary entry for <name>  in  CURRENT,  and  set
    compile   mode.    Words  thus  defined  are  called   'colon-
    definitions'.   The  compilation addresses of subsequent words
    from the input stream which are not immediate words are stored
    in  the  dictionary  to  be  executed  when  <name>  is  later
    executed.  IMMEDIATE words are executed as encountered.
    If a word is not found after a search of the CONTEXT and FORTH
    vocabularies,  conversion and compilation of a literal  number
    is attempted,  with regard to the current BASE;  that failing,
    an error condition exists .


: в fig-FORTH Release 1 glossary, май 1979 (англ.)

:                                           P,E,L0
       Used in the form called a colon-definition:
                  : cccc     ...     ;
       Creates a dictionary entry defining cccc as equivalent to the
       following sequence of Forth word definitions '...' until the next
       ';' or ';CODE'.
       The compiling process is done by the text interpreter as long as
       STATE is non-zero. Other details are that the CONTEXT vocabulary is
       set to the CURRENT vocabulary and that words with the precedence bit
       set (P) are executed rather than being compiled.


Реализация :

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

 : :                                  ( второе ":" - имя слова)
       ?EXEC        ( система в режиме исполнения? Если нет, то
                      сообщение об ошибке)
       !CSP CURRENT @ CONTEXT !            ( CONTEXT = CURRENT)
       CREATE          ( формирует имя нового слова и поле LFA)
       ]                             ( вход в режим компиляции)
       (;CODE) ; IMMEDIATE             ( формирование поля CFA)


История

В Каллисто : не влияет на контекст, то есть ведёт себя также, как в Форте-83 и последующих.


Ссылки


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