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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 3: Строка 3:
Начало цикла — [[Цикл BEGIN-WHILE-REPEAT|BEGIN…WHILE…REPEAT]], [[Цикл BEGIN-UNTIL|BEGIN…UNTIL]] или BEGIN…[[AGAIN]].
Начало цикла — [[Цикл BEGIN-WHILE-REPEAT|BEGIN…WHILE…REPEAT]], [[Цикл BEGIN-UNTIL|BEGIN…UNTIL]] или BEGIN…[[AGAIN]].


Главное назначение оператора BEGIN (при компиляции) — запись в [[Стек данных|стек]] текущего значения указателя [[HERE]], которое использует компилятор, чтобы сформировать правильный адрес ветвления при обработке оператора [[UNTIL]], [[REPEAT]] или [[AGAIN]].
Оператор BEGIN отмечает начало цикла. При компиляции его главное назначение — запись в [[Стек данных|стек]] текущего значения указателя [[HERE]], которое используют слова [[UNTIL]], [[REPEAT]] или [[AGAIN]], чтобы сформировать правильный адрес ветвления.


== Ввод слова BEGIN ==
== Ввод слова BEGIN ==

Версия от 09:16, 26 марта 2016

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

Начало цикла — BEGIN…WHILE…REPEAT, BEGIN…UNTIL или BEGIN…AGAIN.

Оператор BEGIN отмечает начало цикла. При компиляции его главное назначение — запись в стек текущего значения указателя HERE, которое используют слова UNTIL, REPEAT или AGAIN, чтобы сформировать правильный адрес ветвления.

Ввод слова BEGIN

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

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

6.1.0760   BEGIN                                                           CORE
       Интерпретация: Семантика интерпретации для этого слова не определена.
       Компиляция: ( C: -- dest )
           Помещает адрес следующей ячейки для передачи управления, dest, на 
           стек потока-управления. Добавляет семантику времени-выполнения, 
           данную ниже к текущему определению.
       Время-выполнения: ( -- )
           Продолжает выполнение.
       См.: 3.2.3.2 Стек потока-управления, 6.1.2140 REPEAT, 6.1.2390 UNTIL, 
           6.1.2430 WHILE.
A.6.1.0760   BEGIN
Типичное использование:
       : X ... BEGIN ... test UNTIL ;
или
       : X ... BEGIN ... test WHILE ... REPEAT ;

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

     BEGIN        --                            C,I,79
                  -- sys   (compiling)
          Used in the form:
                  BEGIN ... flag UNTIL
          or
                  BEGIN ... flag WHILE ... REPEAT
          BEGIN marks the start of a word sequence for repetitive
          execution.  A BEGIN-UNTIL loop will be repeated until flag
          is true.  A BEGIN-WHILE-REPEAT will be repeated until flag
          is false.  The words after UNTIL or REPEAT will be executed
          when either loop is finished.  sys is balanced with its
          corresponding UNTIL or WHILE .  See:  "9.9 Control
          Structures"

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

BEGIN                                        I,C,147
    Used in a colon-definition in the form:
         BEGIN ... flag UNTIL   or
         BEGIN ... flag WHILE ... REPEAT
    BEGIN  marks  the  start of a  word  sequence  for  repetitive
    execution.   A BEGIN-UNTIL loop will be repeated until flag is
    true.   A  BEGIN-WHILE-REPEAT loop will be repeated until flag
    is  false.   The words after UNTIL or REPEAT will be  executed
    when  either loop is finished.   flag is always dropped  after
    being tested.

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

BEGIN         ---  addr  n  (compiling)     P,L0
       Occurs in a colon-definition in form:
          BEGIN ... UNTIL
          BEGIN ... AGAIN
          BEGIN ... WHILE ... REPEAT
       At run-time, BEGIN marks the start of a sequence that may be
       repetitively executed. It serves as a return point from the
       corresponding UNTIL, AGAIN or REPEAT. When executing UNTIL, a return
       to BEGIN will occur if the top of the stack is false;
       for AGAIN and REPEAT a return to BEGIN always occurs.
       At compile time BEGIN leaves its return address and n for compiler
       error checking.

Реализация BEGIN

Юрий Семёнов приводит следующее описание слова BEGIN (стр. 64):

 : BEGIN   ?COMP HERE 1 ; IMMEDIATE

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

: BEGIN  ( ---> A,2 )   <MARK  2  ; IMMEDIATE

В 11-й главе Starting FORTH слово BEGIN определяется так:

  : BEGIN HERE ; IMMEDIATE

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

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

Ссылки


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


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