Редактирование: BEGIN

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''BEGIN''' (начать, начало) — стандартное слово [[Каллисто]]. Начать цикл.
'''BEGIN''' (начать, начало) — стандартное слово [[Каллисто]].
  BEGIN          ( −− )                              Отметить начало циклов BEGIN.
  BEGIN          ( −− )                              Отметить начало циклов BEGIN.
Два цикла с условием — [[Цикл BEGIN-WHILE-REPEAT|BEGIN…WHILE…REPEAT]] и [[Цикл BEGIN-UNTIL|BEGIN…UNTIL]] — а также «бесконечный» цикл BEGIN…[[AGAIN]] начинаются со слова BEGIN:
Начало цикла [[Цикл BEGIN-WHILE-REPEAT|BEGIN…WHILE…REPEAT]], [[Цикл BEGIN-UNTIL|BEGIN…UNTIL]] или BEGIN…[[AGAIN]].
BEGIN условие WHILE тело-цикла REPEAT
BEGIN тело-цикла условие UNTIL
BEGIN тело-цикла AGAIN


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


== Ввод слова BEGIN ==
== Ввод слова BEGIN ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша БП|{{Чёрная клавиша|БП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша В/О|{{Чёрная клавиша|В/О}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша БП|{{Чёрная клавиша|БП}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]]
== Детали реализации ==
Слово BEGIN начинает свою работу с того, что с помощью [[?COMP]] убеждается — [[INTERPRET|текстовый интерпретатор]] находится в [[Слово ]|состоянии компиляции]]. Если нет, слово [[?COMP]] вызывает [[Авост приложения|авост]].
Само слово BEGIN ничего не компилирует в [[шитый код]]. Оно лишь запоминает в стеке текущий адрес, чтобы в дальнейшем скомпилировать на него [[?BRANCH|условный]] или [[BRANCH|безусловный]] переход.


== BEGIN в стандарте ANS Forth ==
== BEGIN в стандарте ANS Forth ==
Строка 80: Строка 82:


== Реализация ==
== Реализация ==
Слово 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 (стр. 64):
   : BEGIN  ?COMP HERE 1 ; IMMEDIATE
   : BEGIN  ?COMP HERE 1 ; IMMEDIATE
Строка 143: Строка 114:
* {{Исходник|BEGIN|BEGIN}}
* {{Исходник|BEGIN|BEGIN}}
* См. слова [[WHILE]] и [[REPEAT]], [[UNTIL]] и [[AGAIN]]
* См. слова [[WHILE]] и [[REPEAT]], [[UNTIL]] и [[AGAIN]]
* См. также цикл [[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.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://forth-standard.org/standard/core/BEGIN BEGIN] и [http://forth-standard.org/standard/rationale#rat:core:BEGIN комментарий к нему] в черновике Forth 200x ''(англ.)''
Строка 158: Строка 128:
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/BEGIN