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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''WORD''' (слово, читается «ворд») — стандартное слово [[Каллисто]].
'''WORD''' (слово, читается «ворд») — стандартное слово [[Каллисто]].
WORD          ( c −− a )                          Ввести слово до стоп−литеры c.
 
                                                    Дать его адрес, как строки со счётчиком.
Считывает одно слово из [[Входной буфер терминала|входного]] или [[Буфер|экранного]] буфера и размещает его, начиная с адреса [[HERE]]
Считывает одно слово из [[Входной буфер терминала|входного]] или [[Буфер|экранного]] буфера и размещает его, начиная с адреса [[HERE]]


Строка 8: Строка 7:


== WORD в стандарте ANS Forth ==
== WORD в стандарте ANS Forth ==
<pre>
  6.1.2450  WORD                                                            CORE
  6.1.2450  WORD                                                            CORE
             ( char "<chars>ccc<char>" -- c-addr )
             ( char "<chars>ccc<char>" -- c-addr )
Строка 31: Строка 29:
  Типичное использование:
  Типичное использование:
         char WORD ccc<char>
         char WORD ccc<char>
</pre>
== История ==
Слово WORD появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 для [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F САО]. Тогда оно ещё не называлось WORD, так как в то время команды Форта кодировались числами.
Важно, что первый WORD считывал для [[INTERPRET]] слова, разделённые пробелами. Подобный ввод в свободном формате был необычен для того времени, но более эффективным (компактней и быстрее) и надёжным. Фортрановский ввод был отформатирован в конкретные колонки и ошибки набора приводили к многочисленным задержкам.
Чак Мур отказался от слова WORD в {{colorForth}}, где вводимые слова не буферизуются в редактируемой строке, а исполняются сразу по нажатию клавиши «Пробел».


=== WORD в предыдущем стандарте Forth-83 (англ.) ===
== WORD в предыдущем стандарте Forth-83 (англ.) ==
<pre>
       WORD        char -- addr                  M,83
       WORD        char -- addr                  M,83
           Generates a counted string by non-destructively accepting
           Generates a counted string by non-destructively accepting
Строка 63: Строка 52:
           dictionary area at HERE or above.  Note that the text
           dictionary area at HERE or above.  Note that the text
           interpreter may also use this area.  See:  "input stream"
           interpreter may also use this area.  See:  "input stream"
</pre>


=== WORD в стандарте Forth-79 (англ.) ===
== WORD в стандарте Forth-79 (англ.) ==
  WORD          char -- addr                  181
  WORD          char -- addr                  181
     Receive  characters  from the input stream until the  non-zero
     Receive  characters  from the input stream until the  non-zero
Строка 77: Строка 65:
     of the beginning of this packed string is left on the stack.
     of the beginning of this packed string is left on the stack.


=== WORD в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== WORD в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  WORD          c  ---                            L0
  WORD          c  ---                            L0
         Read the next text characters from the input stream being
         Read the next text characters from the input stream being
Строка 88: Строка 76:
         See BLK, IN.
         See BLK, IN.


== Реализация ==
== История ==
Слово WORD кладёт адрес считанного слова в [[Стек данных|стек]], как это требует Форт. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. Первый байт по адресу a содержит число символов в считанном слове. Фактически это уже заготовка для [[Поле имени|поля имени]] новой [[Словарная статья|словарной статьи]], ждущая своего [[ALLOT]].
Слово WORD появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 в 1958 году для [https://ru.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B8%D1%82%D1%81%D0%BE%D0%BD%D0%BE%D0%B2%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%81%D1%82%D1%80%D0%BE%D1%84%D0%B8%D0%B7%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BE%D0%B1%D1%81%D0%B5%D1%80%D0%B2%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F САО]. Тогда оно ещё не называлось WORD, так в то время команды Форта кодировались числами.
 
Длина имени слова ограничивается 31 литерой.
<pre>
3167 ;#WORD
3168 ; WORD            ( c −− a )                          Ввести слово до стоп−литеры c. Дать его адрес, как строки со счётчиком.
3169 ; Считать одно слово из входного или экранного буфера и разместить его, начиная с адреса HERE
3170 ; Первый байт содержит число литер в слове.
3171 ; Положить адрес считанного слова на стек, как это требует Форт−79.
3172 ; Этот адрес a всегда HERE −− как и в большинстве реализаций Форта.
3173 LWORD:         .DB    4
3174                .TEXT  "WORD"                  ; ( c "<c>ccc<c>" −− HERE )
3175                .DW    LPAD
3176 WORD:          .DW CALL, BLK,UAT, QDUP,ZBRAN,WD1, BLOCK, BRAN,WD2
3177 WD1:            .DW TIB
3178 WD2:            .DW IN,UAT, PLUS, SWAP, ENCL
3179                .DW HERE, BL,BLANK              ; BL == 32  ( 31 имя и 1 байт длины)
3180                .DW IN,PSTOR, DUP,TOR, HERE,CSTOR
3181                .DW HERE,ONEP, FROMR, CMOVE, HERE, EXIT
</pre>
Реализация из SP-Forth 4.20:
<pre>
: WORD ( char "<chars>ccc<char>" -- c-addr ) \ 94
\ Пропустить ведущие разделители. Выбрать символы, ограниченные
\ разделителем char.
\ Исключительная ситуация возникает, если длина извлеченной строки
\ больше максимальной длины строки со счетчиком.
\ c-addr - адрес переменной области, содержащей извлеченное слово
\ в виде строки со счетчиком.
\ Если разбираемая область пуста или содержит только разделители,
\ результирующая строка имеет нулевую длину.
\ В конец строки помещается пробел, не включаемый в длину строки.
\ Программа может изменять символы в строке.
  DUP SKIP PARSE 255 MIN
  DUP SYSTEM-PAD C! SYSTEM-PAD CHAR+ SWAP CMOVE
  0 SYSTEM-PAD COUNT CHARS + C!
  SYSTEM-PAD
;
</pre>
 
=== Советская реализация ===
Описание и определение слова WORD в ядре ФОРТ-ЕС:
<PRE>
WORD      С->Т  ВВЕСТИ СЛОВО ДО СТОП-ЛИТЕРЫ C;                27
            ДАТЬ ЕГО АДРЕС КАК СТРОКИ СО СЧЕТЧИКОМ
 
                    Экран номер 27
( 31.03.66    ENCLOSE  WORD )
 
: WORD  ( C->T )  BLK @ IF BLK @ BLOCK ELSE TIB THEN
  >IN @ + SWAP ENCLOSE >IN +!
  HERE >R OVER - >R + ALIGNH HERE 1+ R@ CMOVE
  HERE R> 1+ ALLOT ALIGNH HERE OVER - 2- OVER C! R> DP! ;
</PRE>
Определение слова WORD в FORTH ИТЭФ:
<PRE>
            HEAD    204Q,'WOR',304Q,$WORD,$COL          ; WORD
            DW  BLK,AT,DDUP,ZBRAN,WD1-$,BLOCK,BRAN,WD2-$
  WD1:      DW  TIB,AT
  WD2:      DW  IN,AT,PLUS,SWAP,ENCL,HERE,BLAN,BLANK,IN
            DW  PSTOR,TOR,I,HERE,CSTOR
            DW  HERE,ONEP,FROMR,CMOVE,SEMI
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|WORD|WORD}}
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2450 WORD] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2450 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2450 WORD] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2450 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/WORD WORD] и [http://forth-standard.org/standard/rationale#rat:core:WORD комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/WORD.html WORD] и [http://www.forth200x.org/documents/html3/rationale.html#rat:core:WORD комментарий к нему] в черновике Forth 200x ''(англ.)''
* [http://www.ultratechnology.com/color4th.html «The word WORD is an anathema, it shouldn't exist.»] ''(англ.)'' — одно из первых сообщений Чака Мура о {{colorForth}} (26 июля 1997 года)
* [http://www.ultratechnology.com/color4th.html «The word WORD is an anathema, it shouldn't exist.»] ''(англ.)'' — одно из первых сообщений Чака Мура о {{colorForth}} (26 июля 1997 года)
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




Строка 167: Строка 90:
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Интерпретация входного потока Каллисто]]
[[Категория:Интерпретация входного потока Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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