BEGIN
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 (стр. 64):
: BEGIN ?COMP HERE 1 ; IMMEDIATE
У Баранова-Ноздрунова определение слова BEGIN выглядит так (стр. 58):
: BEGIN ( ---> A,2 ) <MARK 2 ; IMMEDIATE
В 11-й главе Starting FORTH слово BEGIN определяется так:
: BEGIN HERE ; IMMEDIATE
Описание слова BEGIN и определение циклов BEGIN в ядре ФОРТ-ЕС:
BEGIN HK->А,1 /КОМПИЛЯЦИЯ/ НАЧАЛО ЦИКЛА "BEGIN" 47 -> /ИСПОЛНЕНИЕ/ Экран номер 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
Ссылки
- Слово BEGIN и комментарий к нему в стандарте ANS Forth (англ.)
- Слово BEGIN и комментарий к нему в черновике Forth 200x (англ.)
- ЦИКЛИЧЕСКИЕ СТРУКТУРЫ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Цикл в Википедии
- Throw It For a Loop в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |