AGAIN

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

AGAIN — стандартное слово Каллисто.

AGAIN          ( −− )                               Перейти к началу бесконечого цикла BEGIN AGAIN.

Конец безусловного цикла "BEGIN AGAIN".

Ввод слова AGAIN

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

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

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

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

        Время-выполнения: ( -- )
            Продолжает выполнение с адреса ячейки определенного dest. Если 
            никакое другое слово потока управления не используется, любой код 
            программы после AGAIN не будет выполнен.

        См.: 6.1.0760 BEGIN.

 A.6.2.0700   AGAIN
 Типичное использование:
        : X ... BEGIN ... AGAIN ... ;

 Если последовательность слов не имеет способ закончиться, это бесконечный цикл.

История

Слово AGAIN является одним из самых древних и вошло во все стандарты Форта.

Цикл BEGIN…AGAIN появился в 1966 году под именем START ... REPEAT, когда Чак Мур, будучи гуру MCP на 5500, работал в Realtime Systems, Inc (RSI).

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

     AGAIN        --                            C,I
                  sys --   (compiling)
          Effect an unconditional jump back to the start of a BEGIN-
          AGAIN loop.  sys is balanced with its corresponding BEGIN .
          See:  BEGIN

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

AGAIN                                        I,C,114
    Effect  an  unconditional jump back to the start of  a  BEGIN-
    AGAIN loop.

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

 AGAIN addr n --- (compiling) P,C2,L0
        Used in a colon-definition in the form:
                         BEGIN ... AGAIN
        At run-time, AGAIN forces execution to return to corresponding
        BEGIN.
        There is no effect on the stack. Execution cannot leave this loop
        (unless R> DROP is executed one level below).

        At compile time, AGAIN compiles BRANCH with an offset from HERE to
        addr. n is used for compile-time error checking.

Реализация

На этапе компиляции AGAIN может вызывать авост.

3659 RLRESOLVE:      .DW LITP
3660                 .DB 39,17                       ; 10001
3661                 .DW SUB, BRAN,RCOMMA
…
3670 ;#AGAIN
3671 ; AGAIN          I ( −− )                               Перейти к началу бесконечого цикла BEGIN AGAIN.
3672 LAGAIN:         .DB     85H
3673                 .TEXT   "AGAIN"
3674                 .DW     LUNTIL                  ; Конец бесконечного цикла "BEGIN AGAIN".
3675 AGAIN:          .DW CALL, ONE,QPAIR, COMP,BRAND, BRAN,RLRESOLVE

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

: AGAIN  \ 94 CORE EXT
\ Интерпретация: семантика неопределена.
\ Компиляция: ( C: dest -- )
\ Добавить семантику времени выполнения, данную ниже, к текущему определению,
\ разрешив ссылку назад dest.
\ Время выполнения: ( -- )
\ Продолжить выполнение с позиции, заданной dest. Если другие управляющие слова
\ не используются, то любой программный код после AGAIN не будет выполняться.
  ?COMP 3 <> IF -2006 THROW THEN \ ABORT" AGAIN без BEGIN !"
  DUP DP @ 2+ - DUP
  SHORT?
  IF SetJP 0xEB C, C, DROP
  ELSE DROP BRANCH, THEN  DP @ TO :-SET
; IMMEDIATE
: AGAIN  POSTPONE AGAIN DP @ TO :-SET ; IMMEDIATE

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

Описание слова AGAIN и определение цикла BEGIN…AGAIN в ядре ФОРТ-ЕС:

AGAIN   +НК А,1-> /КОМПИЛЯЦИЯ/ КОНЕЦ ЦИКЛА "BEGIN AGAIN"        47
          -> /ИСПОЛНЕНИЕ/

                      Экран номер 47
 ( 31.03.86   СТАНДАРТНЫЕ СТРУКТУРЫ УПРАВЛЕНИЯ )
 : BEGIN   ?COMP <MARK 1 ; IMMEDIATE
 : AGAIN   1 ?PAIRS COMPILE  BRANCH <RESOLVE ; IMMEDIATE

Ссылки


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


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