Текущая версия |
Ваш текст |
Строка 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 в предыдущем стандарте 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: |
Строка 53: |
| 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: |
Строка 67: |
| 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: |
Строка 79: |
| See BLK, IN. | | 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] и [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://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: |
Строка 88: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Интерпретация входного потока Каллисто]] | | [[Категория:Интерпретация входного потока Каллисто]] |
| [[Категория:Стандартные слова]] | | [[Категория:Слова Каллисто без стековых диаграмм]] |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |