LITERAL: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Строка 79: Строка 79:
</pre>
</pre>
<pre>
<pre>
: TC-LIT,
  S" DUP" TC-FINDOUT INLINE,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE ;
: TC-LITERAL \ 94 CORE
: TC-LITERAL \ 94 CORE
\ Интерпретация: семантика неопределена.
\ Интерпретация: семантика неопределена.

Версия от 21:13, 13 ноября 2017

LITERAL (литерал) — стандартное слово Каллисто. Целочисленный литерал.

LITERAL        ( D −− | D )                         Скомпилировать D в литерал. В режиме исполнения оставляет D на стеке.
  1. При компиляции переносит код D из стека в описание нового слова, а при интерпретации описанного слова записывает в стек указанное 16-битное число со знаком D. Скомпилированный код может зависеть от значения компилируемого числа.
  2. При исполнении оставляет D на вершине стека.

Обычно разработчики пользуются словом LITERAL неявно. Оно вызывается из текстового интерпретатора, когда тот обработал число во входном потоке. Но слово LITERAL может оказаться полезным при разработке собственных компилирующих слов.

Ввод слова LITERAL

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

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

 6.1.1780   LITERAL                                                         CORE
        Интерпретация: Семантика интерпретации для этого слова не определена.

        Компиляция: ( x -- )
            Добавляет семантику времени-выполнения, данную ниже к текущему 
            определению.

        Время-выполнения: ( -- x )
            Помещает x на стек.

 A.6.1.1780   LITERAL
 Типичное использование:
        : X  ... [ x ] LITERAL ...  ;

История

В некоторых Фортах слово LITERAL называлось LIT

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

     LITERAL      -- 16b                        C,I,79
                  16b --   (compiling)
          Typically used in the form:
                  [ 16b ] LITERAL
          Compiles a system dependent operation so that when later
          executed, 16b will be left on the stack.

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

LITERAL        n --                          I,215
    If  compiling,  then  compile  the stack value n as  a  16-bit
    literal, which when later executed, will leave n on the stack.

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

LITERAL       n --- (compiling)              P,C2,L0
       If compiling, then compile the stack value n as a 16 bit literal.
       This definition is immediate so that it will execute during a colon
       definition. The intended use is:
             : xxx    [ calculate ]  LITERAL  ;
       Compilation is suspended for the compile time calculation of m
       value.
       Compilation is resumed and LITERAL compiles this value.

Реализация

3351 ;#LITERAL
3352 ; LITERAL        I ( D −− | D )                         Скомпилировать D в литерал. В режиме исполнения оставить D на стеке.
3353 ; 1. При компиляции перенести код D из стека в описание нового слова,
3354 ; а при интерпретации записанное слово кладёт D на стек.
3355 ; Скомпилированный код может зависеть от значения компилируемого числа.
3356 ; 2. При исполнении оставить D на вершине стека.
3357 LLITER:         .DB     87H
3358                 .TEXT   "LITERAL"               ; ( n −− )
3359                 .DW     LTO
3360 LITER:          .DW CALL
3361 RLITER:         .DW STATE,UAT, ZBRAN,REXIT, COMP,LITD, BRAN,RCOMMA

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

: LITERAL \ 94 CORE
\ Интерпретация: семантика неопределена.
\ Компиляция: ( x -- )
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
\ Время выполнения: ( -- x )
\ Положить x на стек.
  STATE @ IF LIT, THEN
; IMMEDIATE
: TC-LITERAL \ 94 CORE
\ Интерпретация: семантика неопределена.
\ Компиляция: ( x -- )
\ Добавить семантику времени выполнения, данную ниже, к текущему определению.
\ Время выполнения: ( -- x )
\ Положить x на стек.
  STATE @ IF TC-LIT, THEN
; IMMEDIATE
…
: LITERAL
    STATE @ IF TC-LIT, THEN
; IMMEDIATE

Советская реализация

Cледующее описание оператора LITERAL через примитив (LITERAL) приведено у Юрия Семёнова (стр. 84) и Баранова-Ноздрунова (стр. 55):

 : LITERAL  ( A ---> A / )
             STATE @ IF                   ( если интерпретация)
             COMPILE (LITERAL)      ( введение в описание слова
                           [CFA] системного оператора (LITERAL)
             ,  ( введение в описание слова значения константы)
             THEN ; IMMEDIATE

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

LITERAL   H  W-> /КОМПИЛЯЦИЯ/ СКОМПИЛИРОВАТЬ W КАК              23
             ->W /ИСПОЛНЕНИЕ/ ЛИТЕРАЛ

                     Экран номер 23
( 31.03.84    LIT 2LIT LITERAL 2LITERAL SPACE SPACES )

: LITERAL   ( W->) STATE @ IF COMPILE LIT , THEN ; IMMEDIATE

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

             HEAD    307Q,'LITERA',314Q,LITER,$COL        ; LITERAL
             DW  STATE,AT,ZBRAN,LIL-$,COMP,LIT,COMMA
   LIL:      DW  SEMI

Ссылки


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


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