[COMPILE]

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

[COMPILE] (компилировать) — стандартное слово Каллисто.

[COMPILE]      ( −− )                               Скомпилировать следующее слово, независимо от его признака IMMEDIATE.

Фраза [COMPILE] XXX заставляет слово XXX скомпилироваться, даже если оно обладает признаком немедленного исполнения. Используется внутри определений через двоеточие.

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

В режиме NUM последовательно нажмите клавиши  БП     Р-ГРД-Г   С/П   5   ÷   6   7      ИП     P   ПП 

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

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

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

        См.: 3.4.1 Синтаксический анализ.

 A.6.2.2530   [COMPILE]
 Типичное использование:
        : name2 ... [COMPILE] name1 ... ;  IMMEDIATE

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

Сейчас вне Каллисто используется мало, в моде POSTPONE

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

     [COMPILE]    --                        C,I,M,79 "bracket-compile"
                  --   (compiling)
          Used in the form:
                  [COMPILE] <name>
          Forces compilation of the following word <name>.  This
          allows compilation of an immediate word when it would
          otherwise have been executed.

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

[COMPILE]                                I,C,179  "bracket-compile"
    Used in a colon-definition in the form:
         [COMPILE] <name>
    Forces  compilation  of  the  following  word.    This  allows
    compilation  of  an IMMEDIATE word when it would otherwise  be
    executed.

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

[COMPILE]                                       p,C
       Used in a colon-definition in form:
                        :  xxx    [COMPILE]   FORTH   ;
       [COMPILE] will force the compilation of an immediate definitions,
       that would otherwise execute during compilation. The above example
       will select the FORTH vocabulary then xxx executes, rather than at
       compile time.

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

3333 ;#BracketCOMPILE
3334 ; [COMPILE]      I ( −− )                               Скомпилировать следующее слово независимо от его признака IMMEDIATE.
3335 ; Заставить следующее слово скомпилироваться, даже если оно обладает признаком немедленного исполнения.
3336 ; Используется внутри определений через двоеточие. Сейчас используется мало, в моде POSTPONE
3337 LBCOM:          .DB     89H
3338                 .TEXT   "[COMPILE]"             ; ( "<пр>имя" −− )
3339                 .DW     LCREAT
3340 BCOM:           .DW     CALL, BL,WORD, FIND, ZEQU, ZERO,QERR, DROP, N2CFA, BRAN,RCOMMA

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

: POSTPONE \ 94
\ Интерпретация: семантика не определена.
\ Компиляция: ( "<spaces>name" -- )
\ Пропустить ведущие разделители. Выделить имя, ограниченное пробелами.
\ Найти имя. Добавить семантику компиляции имени в текущее определение.
  ?COMP
  PARSE-NAME SFIND DUP
  0= IF -321 THROW THEN
  1 = IF COMPILE,
      ELSE LIT, ['] COMPILE, COMPILE, THEN
; IMMEDIATE
…
: [COMPILE]  \ 94 CORE EXT
\ Интерпретация: семантика неопределена.
\ Компиляция: ( "<spaces>name" -- )
\ Пропустить ведущие пробелы. Выделить name, ограниченное пробелами.
\ Найти name. Если имя имеет иную семантику компиляции, чем "по-умолчанию", 
\ добавить ее в текущее определение; иначе добавить семантику выполнения name.
\ Неопределенная ситуация возникает, если name не найдено.
  ?COMP
  '
  COMPILE,
; IMMEDIATE
: POSTPONE \ 94
  ALSO TC-WL
  ?COMP
  PARSE-NAME SFIND DUP
  0= IF -321 THROW THEN
  1 = IF COMPILE,
      ELSE LIT, S" COMPILE," TC-FINDOUT COMPILE, THEN
  PREVIOUS
; IMMEDIATE

: [COMPILE]  \ 94 CORE EXT
  ALSO TC-WL ' PREVIOUS
  COMPILE,
; IMMEDIATE

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

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

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

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

[COMPILE] НК ->            СКОМПИЛИРОВАТЬ СЛЕДУЮЩЕЕ СЛОВО  41
                   НЕЗАВИСИМО ОТ ЕГО ПРИЗНАКА "IMMEDIATE"

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

: [COMPILE] ( ->) -FIND IF , EXIT THEN BADWORD ; IMMEDIATE

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

             HEAD    311Q,'[COMPILE',335Q,BCOM,$COL       ; [COMPILE]
             DW  DFIND,ZEQU,ZERO,QERR,DROP,COMMA,SEMI

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


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


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