Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''BEGIN''' (начать, начало) — стандартное слово [[Каллисто]]. Начать цикл. | | '''BEGIN''' — стандартное слово [[Каллисто]]. |
| BEGIN ( −− ) Отметить начало циклов BEGIN.
| |
| Два цикла с условием — [[Цикл BEGIN-WHILE-REPEAT|BEGIN…WHILE…REPEAT]] и [[Цикл BEGIN-UNTIL|BEGIN…UNTIL]] — а также «бесконечный» цикл BEGIN…[[AGAIN]] начинаются со слова BEGIN:
| |
| BEGIN условие WHILE тело-цикла REPEAT
| |
| BEGIN тело-цикла условие UNTIL
| |
| BEGIN тело-цикла AGAIN
| |
|
| |
|
| Слово BEGIN отмечает начало цикла. При компиляции его главное назначение — запись в [[Стек данных|стек]] текущего значения указателя [[HERE]], которое используют слова [[UNTIL]], [[REPEAT]] или [[AGAIN]], чтобы сформировать правильный адрес ветвления на начало цикла.
| | Начало циклов "[[BEGIN]]". |
|
| |
|
| == Ввод слова BEGIN ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша БП|{{Чёрная клавиша|БП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]]
| |
|
| |
|
| == BEGIN в стандарте ANS Forth == | | == BEGIN в стандарте ANS Forth == |
| <pre>
| |
| 6.1.0760 BEGIN CORE | | 6.1.0760 BEGIN CORE |
| Интерпретация: Семантика интерпретации для этого слова не определена. | | Интерпретация: Семантика интерпретации для этого слова не определена. |
Строка 32: |
Строка 24: |
| или | | или |
| : X ... BEGIN ... test WHILE ... REPEAT ; | | : X ... BEGIN ... test WHILE ... REPEAT ; |
| </pre>
| |
|
| |
|
| == История ==
| | |
| === BEGIN в предыдущем стандарте Forth-83 (англ.) ===
| | == BEGIN в предыдущем стандарте Forth-83 (англ.) == |
| BEGIN -- C,I,79 | | BEGIN -- C,I,79 |
| -- sys (compiling) | | -- sys (compiling) |
Строка 50: |
Строка 41: |
| Structures" | | Structures" |
|
| |
|
| === BEGIN в стандарте Forth-79 (англ.) ===
| | |
| | == BEGIN в стандарте Forth-79 (англ.) == |
| BEGIN I,C,147 | | BEGIN I,C,147 |
| Used in a colon-definition in the form: | | Used in a colon-definition in the form: |
Строка 62: |
Строка 54: |
| being tested. | | being tested. |
|
| |
|
| === BEGIN в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| |
| <pre>
| |
| 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.
| |
| </pre>
| |
|
| |
| == Реализация ==
| |
| Слово BEGIN начинает свою работу с того, что с помощью [[?COMP]] убеждается — [[INTERPRET|текстовый интерпретатор]] находится в [[Слово ]|состоянии компиляции]]. Если нет, слово [[?COMP]] вызывает [[Авост приложения|авост]] с сообщением об ошибке №17.
| |
|
| |
| Само слово BEGIN ничего не компилирует в [[шитый код]]. Оно лишь [[⟨MARK|запоминает в стеке текущий адрес]], чтобы в дальнейшем скомпилировать на него [[?BRANCH|условный]] (цикл BEGIN…[[UNTIL]]) или [[BRANCH|безусловный]] (циклы BEGIN…[[AGAIN]] и [[Цикл BEGIN-WHILE-REPEAT|BEGIN…WHILE…REPEAT]]) переход.
| |
| <pre>
| |
| 3677 ;#BEGIN
| |
| 3678 ; BEGIN I ( −− ) Начало циклов "BEGIN".
| |
| 3679 LBEGIN: .DB 85H
| |
| 3680 .TEXT "BEGIN"
| |
| 3681 .DW LAGAIN
| |
| 3682 BEGIN: .DW CALL, QCOMP, LMARK, ONE, EXIT
| |
| </pre>
| |
| Реализации из SP-Forth 4.20:
| |
| <pre>
| |
| : BEGIN \ 94
| |
| \ Интерпретация: семантика неопределена.
| |
| \ Компиляция: ( C: -- dest )
| |
| \ Положить следующую позицию передачи управления, dest, на управляющий стек.
| |
| \ Добавить семантику времени выполнения, данную ниже, к текущему определению.
| |
| \ Время выполнения: ( -- )
| |
| \ Продолжить выполнение.
| |
| ?COMP
| |
| ALIGN-BYTES @ ALIGN-NOP
| |
| \ HERE TO :-SET
| |
| <MARK 3
| |
| ; IMMEDIATE
| |
| </pre>
| |
| <pre>
| |
| : BEGIN POSTPONE BEGIN DP @ TO :-SET ; IMMEDIATE
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| Юрий Семёнов приводит следующее определение слова BEGIN (стр. 64):
| |
| : BEGIN ?COMP HERE 1 ; IMMEDIATE
| |
|
| |
| У Баранова-Ноздрунова определение слова BEGIN выглядит так (стр. 58):
| |
| : BEGIN ( ---> A,2 ) <MARK 2 ; IMMEDIATE
| |
|
| |
| В 11-й главе [http://www.forth.com/starting-forth/sf11/sf11.html Starting FORTH] слово BEGIN определяется так:
| |
| : BEGIN HERE ; IMMEDIATE
| |
|
| |
| Описание слова BEGIN и определение циклов BEGIN в ядре ФОРТ-ЕС:
| |
| <pre>
| |
| 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
| |
| </pre>
| |
| Определение слова BEGIN в FORTH ИТЭФ:
| |
| <PRE>
| |
| HEAD 305Q,'BEGI',316Q,BEGIN,$COL ; BEGIN
| |
| DW QCOMP,HERE,ONE,SEMI
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|BEGIN|BEGIN}} | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0760 Слово BEGIN в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0760 комментарий к нему] ''(англ.)'' |
| * См. слова [[WHILE]] и [[REPEAT]], [[UNTIL]] и [[AGAIN]]
| | * [http://www.forth200x.org/documents/html/core.html#core:BEGIN Слово BEGIN в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:BEGIN комментарий к нему] ''(англ.)'' |
| * См. также цикл [[FOR]]…[[NEXT]]
| |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0760 BEGIN] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0760 комментарий к нему] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth-standard.org/standard/core/BEGIN BEGIN] и [http://forth-standard.org/standard/rationale#rat:core:BEGIN комментарий к нему] в черновике Forth 200x ''(англ.)'' | |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\06.ZIKLITESKIE%20STRUKTURY ЦИКЛИЧЕСКИЕ СТРУКТУРЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29 Цикл в Википедии] | | * [https://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D0%BA%D0%BB_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29 Цикл в Википедии] |
| * [http://www.forth.com/starting-forth/sf6/sf6.html Throw It For a Loop] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
|
| |
|
|
| |
|
Строка 154: |
Строка 64: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Слова с признаком IMMEDIATE]]
| |
| [[Категория:Структуры управления Каллисто]] | | [[Категория:Структуры управления Каллисто]] |
| [[Категория:Слова, способные вызывать авост приложения]]
| |
| [[Категория:Компилирующие слова]]
| |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |