[']

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

['] — стандартное слово Каллисто.

[']            ( −− | т )                           Скомпилировать токен (CFA) следующего слова, как числовой литерал.

Используется только в определении через двоеточие. Компиляция адреса (CFA) следующего слова из определения, как литерала.

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

В режиме NUM последовательно нажмите четыре клавиши  БП     F   1     ПП 

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

 6.1.2510   [']                         "bracket-tick"                      CORE
        Интерпретация: Семантика интерпретации для этого слова не определена.

        Компиляция: ( "<spaces>name" -- )
            Пропускает ведущие разделители пробелы. Выделяет name, ограниченное 
            пробелом. Находит name. Добавляет семантику времени-выполнения, 
            данную ниже к текущему определению.
            Неопределенная ситуация существует, если name не найдено.

        Время-выполнения: ( -- xt )
            Помещает идентификатор исполнения name xt на стек. Идентификатор 
            исполнения, возвращенный скомпилированной фразой "['] X " , имеет 
            то же значение, как и возвращенный "' X " вне состояния компиляции.

        См.: 3.4.1 Синтаксический анализ, A.6.1.0070 ', A.6.1.2033 POSTPONE, 
            D.6.7 Immediate-ности.

 A.6.1.2510   [']
 Типичное использование:
        : X  ... ['] name ... ;

 См.: A.6.1.1550 FIND.

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

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

     [']          -- addr                      C,I,M,83 "bracket-tick"
                  --   (compiling)
          Used in the form:
                  ['] <name>
          Compiles the compilation address addr of <name> as a
          literal.  When the colon definition is later executed addr
          is left on the stack.  An error condition exists if <name>
          is not found in the currently active search order.  See:
          LITERAL

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

3621 ;#BracketTick
3622 ; [']            I ( −− | т )                           Скомпилировать токен (CFA) следующего слова, как числовой литерал.
3623 ; Используется только в определении через двоеточие. Компиляция адреса (CFA) следующего слова из определения, как литерала.
3624 LBTICK:         .DB     83H
3625                 .TEXT   "[']"                                   ; состояние компиляции: ( "<пр>имя" −− )
3626                 .DW     LTICKCFA                                ; состояние выполнения: ( −− cfa )
3627 BTICK:          .DW CALL, TICKCFA, BRAN,RLITER

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

: [']  \ 94
\ Интерпретация: семантика неопределена.
\ Компиляция: ( "<spaces>name" -- )
\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. Найти name.
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
\ Неопределенная ситуация возникает, если name не найдено.
\ Добавить семантику времени выполнения, данную ниже, к текущему определению,
\ Время выполнения: ( -- xt )
\ Положить выполнимый токен имени xt на стек. Выполнимый токен, возвращаемый
\ скомпилированной фразой "['] X" является тем же значением, что и возвращаемое
\ "' X" вне состояния компиляции.
  ?COMP
  ' LIT,
; IMMEDIATE
: ['] ALSO TC-WL ' >VIRT TC-LIT, PREVIOUS ; IMMEDIATE

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

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

: [']  ( ---> )   '  COMPILE  (LITERAL)  ,  ;  IMMEDIATE

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

[']      НК -> /КОМПИЛЯЦИЯ/            СКОМПИЛИРОВАТЬ CFA  41
            -> CFA /ИСПОЛНЕНИЕ/      СЛЕДУЮЩЕГО СЛОВА КАК
                                         ЧИСЛОВОЙ ЛИТЕРАЛ

                    Экран номер 41
( 31.03.86  -TRAILING  ' ['] [COMPILE] LOAD THRU ;S  --> )

: ['] ( -> ) ?COMP ' [COMPILE] LITERAL ; IMMEDIATE

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


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


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