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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 27: Строка 27:
  Типичное использование:
  Типичное использование:
         : X ... test IF ... ELSE ... THEN ;
         : X ... test IF ... ELSE ... THEN ;


== ELSE в предыдущем стандарте Forth-83 (англ.) ==
== ELSE в предыдущем стандарте Forth-83 (англ.) ==
Строка 38: Строка 37:
           balanced with its corresponding IF .  sys2 is balanced with
           balanced with its corresponding IF .  sys2 is balanced with
           its corresponding THEN .  See:  IF  THEN
           its corresponding THEN .  See:  IF  THEN


== ELSE в стандарте Forth-79 (англ.) ==
== ELSE в стандарте Forth-79 (англ.) ==
Строка 47: Строка 45:
     execution  to skip till just after THEN.  It has no effect on
     execution  to skip till just after THEN.  It has no effect on
     the stack.  (see IF)
     the stack.  (see IF)


== ELSE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
== ELSE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
Строка 61: Строка 58:
         resolves the pending forward branch from IF by calculating the
         resolves the pending forward branch from IF by calculating the
         offset from addr1 to HERE and storing at addr1.
         offset from addr1 to HERE and storing at addr1.


== Реализация ELSE ==
== Реализация ELSE ==
Строка 76: Строка 72:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова с признаком IMMEDIATE]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Слова Каллисто без стековых диаграмм]]

Версия от 01:53, 20 марта 2016

Пример работы слова ELSE

ELSE (иначе) — стандартное слово Каллисто.

Начало 2-ой ветви ветвления "IF".

Ввод слова ELSE

В режиме ЛАТ последовательно нажмите четыре клавиши  ИП      1   ИП 

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

6.1.1310   ELSE                                                            CORE
       Интерпретация: Семантика интерпретации для этого слова не определена.
       Компиляция: ( C: orig1 -- orig2 )
           Помещает адрес ячейки новой неразрешенной ссылки вперед orig2 на 
           стек потока управления. Добавляет семантику времени-выполнения 
           данную ниже к текущему определению. Семантика будет не завершена, 
           пока orig2 не разрешена (например, THEN). Разрешает ссылку вперед 
           orig1 использованием адреса ячейки после добавленной семантики 
           времени-выполнения.
       Время-выполнения: ( -- )
           Продолжает выполнение с адреса ячейки данного ссылкой orig2.
       См.: 6.1.1700 IF, 6.1.2270 THEN.
A.6.1.1310   ELSE
Типичное использование:
       : X ... test IF ... ELSE ... THEN ;

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

     ELSE         --                            C,I,79
                  sys1 -- sys2   (compiling)
          Used in the form:
                  flag IF ... ELSE ... THEN
          ELSE executes after the true part following IF .  ELSE
          forces execution to continue at just after THEN .  sys1 is
          balanced with its corresponding IF .  sys2 is balanced with
          its corresponding THEN .  See:  IF  THEN

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

ELSE           --                            I,C,167
    Used in a colon-definition in the form:
         IF ... ELSE ... THEN
    ELSE executes after the true part following IF.   ELSE  forces
    execution  to skip till just after THEN.   It has no effect on
    the stack.  (see IF)

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

ELSE            addr1 n1 --- addr2 n2          (compiling) P,C2,L0
       Occurs within a colon-definition in the form:
                        IF ... ELSE ... ENDIF
       At run-time, ELSE executes after the true part following IF. ELSE
       forces execution to skip over the following false part and resumes
       execution after the ENDIF. It has no stack effect.
       At compile-time ELSE emplaces BRANCH reserving a branch offset,
       leaves the address addr2 and n2 for error testing. ELSE also
       resolves the pending forward branch from IF by calculating the
       offset from addr1 to HERE and storing at addr1.

Реализация ELSE

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

: ELSE  ( A1,1 ---> A2,1 )   1 ?PAIRS  COMPILE BRANCH
      >MARK  ↔  >RESOLVE  1  ; IMMEDIATE

Ссылки


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


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