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

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

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

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


== Ввод слова WORD ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите четыре клавиши [[Клавиша В↑|{{Серая клавиша|В↑}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша K|{{Синяя клавиша|K}}]]


== 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: Строка 27:
  Типичное использование:
  Типичное использование:
         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 в предыдущем стандарте Forth-83 (англ.) ==
 
Чак Мур отказался от слова WORD в {{colorForth}}, где вводимые слова не буферизуются в редактируемой строке, а исполняются сразу по нажатию клавиши «Пробел».
 
=== 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: Строка 51:
           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          char -- addr                  181
    Receive  characters  from the input stream until the  non-zero
    delimiting  character  is encountered or the input  stream  is
    exhausted,  ignoring leading delimiters.  The characters  are
    stored  as  a  packed string with the character count  in  the
    first  character position.  The actual delimiter  encountered
    (char  or  null)  is stored at the end of  the  text  but  not
    included  in the count.  If the input stream was exhausted as
    WORD is called,  then a zero length will result.  The address
    of the beginning of this packed string is left on the stack.
=== WORD в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
WORD          c  ---                            L0
        Read the next text characters from the input stream being
        interpreted, until a delimiter c is found, storing the packed
        character string beginning at the dictionary buffer HERE. WORD
        leaves the character count in the first byte, the characters, and
        ends with two or more blanks. Leading occurrences of c are ignored.
        If BLK is zero text is taken from the terminal input buffer,
        otherwise from the disc block stored in BLK.
        See BLK, IN.
== Реализация ==
Слово WORD кладёт адрес считанного слова в [[Стек данных|стек]], как это требует Форт. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. Первый байт по адресу a содержит число символов в считанном слове. Фактически это уже заготовка для [[Поле имени|поля имени]] новой [[Словарная статья|словарной статьи]], ждущая своего [[ALLOT]].
Длина имени слова ограничивается 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 в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.2450 комментарии к нему] ''(англ.)''
* Слово [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://www.forth200x.org/documents/html/core.html#core:WORD Слово WORD в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:WORD комментарий к нему] ''(англ.)''
* Слово [http://forth-standard.org/standard/core/WORD WORD] и [http://forth-standard.org/standard/rationale#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://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] ''(англ.)''




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

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

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