LITERAL
Перейти к навигации
Перейти к поиску
LITERAL (литерал) — стандартное слово Каллисто. Целочисленный литерал.
LITERAL ( D −− | D ) Скомпилировать D в литерал. В режиме исполнения оставляет D на стеке.
- При компиляции переносит код D из стека в описание нового слова, а при интерпретации описанного слова записывает в стек указанное 16-битное число со знаком D. Скомпилированный код может зависеть от значения компилируемого числа.
- При исполнении оставляет 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
?lit в colorForth (cf2019.nasm 2019 Sep 14)[править]
qlit: ; ?lit mov edx, [ v_H ] lea edx, [ edx - 0x05 ] cmp [ list ], edx jnz .forward cmp byte [edx], _MOV_TOS_LIT_ ; the opcode for mov eax, 32_bit_literal (in next 32 bit cell) jnz .forward _DUP_ mov _TOS_, [ list + 4 ] mov [ list ], _TOS_ mov _TOS_, [ edx + 0x01 ] cmp dword [ edx - 5 ], 0x89FC768D ; assemble code 8D 76 FC 89 rr => lea esi, [ esi - 0x04 ] ; mov [ esi ], register ; like dup but with the register value still to follow in the next byte jz .forward2 mov [ v_H ], edx jmp dword cdrop .forward2: add dword [ v_H ], byte -0x0A ret .forward: xor edx, edx ret
Ссылки[править]
- Исходный текст слова LITERAL в Каллисто Классик 1.0
- См. слова (LITERAL) и FLITERAL
- Слово LITERAL и комментарий к нему в стандарте ANS Forth (англ.)
- Слово LITERAL и комментарий к нему в черновике Forth 200x (англ.)
- РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- См. главу Extending the Compiler, More Compiler-Controlling Words в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |