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

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

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

Текущая версия Ваш текст
Строка 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-WHILE-REPEAT|BEGIN…WHILE…REPEAT]], [[Цикл BEGIN-UNTIL|BEGIN…UNTIL]] или BEGIN…[[AGAIN]].
 
Оператор BEGIN отмечает начало цикла. При компиляции его главное назначение — запись в [[Стек данных|стек]] текущего значения указателя [[HERE]], которое используют слова [[UNTIL]], [[REPEAT]] или [[AGAIN]], чтобы сформировать правильный адрес ветвления.


== Ввод слова BEGIN ==
== Ввод слова BEGIN ==
Строка 12: Строка 9:


== BEGIN в стандарте ANS Forth ==
== BEGIN в стандарте ANS Forth ==
<pre>
  6.1.0760  BEGIN                                                          CORE
  6.1.0760  BEGIN                                                          CORE
         Интерпретация: Семантика интерпретации для этого слова не определена.
         Интерпретация: Семантика интерпретации для этого слова не определена.
Строка 32: Строка 28:
  или
  или
         : 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: Строка 44:
           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: Строка 56:
     being tested.
     being tested.


=== BEGIN в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== BEGIN в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
<pre>
  BEGIN        ---  addr  n  (compiling)    P,L0
  BEGIN        ---  addr  n  (compiling)    P,L0
         Occurs in a colon-definition in form:
         Occurs in a colon-definition in form:
Строка 77: Строка 70:
         At compile time BEGIN leaves its return address and n for compiler
         At compile time BEGIN leaves its return address and n for compiler
         error checking.
         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 (стр. 64):
   : BEGIN  ?COMP HERE 1 ; IMMEDIATE
   : BEGIN  ?COMP HERE 1 ; IMMEDIATE
Строка 141: Строка 102:


== Ссылки ==
== Ссылки ==
* {{Исходник|BEGIN|BEGIN}}
* См. слова [[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 ''(англ.)''
Строка 157: Строка 115:
[[Категория:Слова с признаком IMMEDIATE]]
[[Категория:Слова с признаком IMMEDIATE]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Структуры управления Каллисто]]
[[Категория:Слова, способные вызывать авост приложения]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Компилирующие слова]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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