WORD: различия между версиями
AtH (обсуждение | вклад) (→Ссылки) |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
'''WORD''' (слово, читается «ворд») — стандартное слово [[Каллисто]]. | '''WORD''' (слово, читается «ворд») — стандартное слово [[Каллисто]]. | ||
WORD ( c −− a ) Ввести слово до стоп−литеры c. Дать его адрес как строки со счётчиком. | |||
Считывает одно слово из [[Входной буфер терминала|входного]] или [[Буфер|экранного]] буфера и размещает его, начиная с адреса [[HERE]] | |||
Первый байт по адресу a содержит число символов в слове. Слово WORD кладёт адрес считанного слова в стек, как это требует Форт−79. Этот адрес a всегда равен [[HERE]] — как и в большинстве реализаций Форта. | |||
== Ввод слова WORD == | == Ввод слова WORD == | ||
Строка 7: | Строка 9: | ||
== 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 ) | ||
Строка 29: | Строка 32: | ||
Типичное использование: | Типичное использование: | ||
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 | ||
Строка 52: | Строка 64: | ||
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 | ||
Строка 65: | Строка 78: | ||
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 | ||
Строка 75: | Строка 88: | ||
otherwise from the disc block stored in BLK. | otherwise from the disc block stored in BLK. | ||
See BLK, IN. | See BLK, IN. | ||
== Реализация == | == Реализация == | ||
Строка 108: | Строка 114: | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|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://forth-standard.org/standard/core/WORD WORD] и [http://forth-standard.org/standard/rationale#rat:core:WORD комментарий к нему] в черновике Forth 200x ''(англ.)'' | ||
Строка 120: | Строка 127: | ||
[[Категория:Слова высокого уровня]] | [[Категория:Слова высокого уровня]] | ||
[[Категория:Интерпретация входного потока Каллисто]] | [[Категория:Интерпретация входного потока Каллисто]] | ||
Версия от 23:38, 14 июня 2016
WORD (слово, читается «ворд») — стандартное слово Каллисто.
WORD ( c −− a ) Ввести слово до стоп−литеры c. Дать его адрес как строки со счётчиком.
Считывает одно слово из входного или экранного буфера и размещает его, начиная с адреса HERE
Первый байт по адресу a содержит число символов в слове. Слово WORD кладёт адрес считанного слова в стек, как это требует Форт−79. Этот адрес a всегда равен HERE — как и в большинстве реализаций Форта.
Ввод слова WORD
В режиме ЛАТ последовательно нажмите четыре клавиши В↑ 5 × K
WORD в стандарте ANS Forth
6.1.2450 WORD CORE ( char "<chars>ccc<char>" -- c-addr ) Пропускает ведущие разделители. Выделяет символы ccc ограниченные char. Неопределенная ситуация существует, если длина выделенной строки больше чем длина определенной реализацией строки со счетчиком. c-addr - адрес временной области, содержащей выделенное слово как строку со счетчиком. Если область анализа была пуста или не содержала других символов кроме разделителей, результирующая строка имеет нулевую длину. За строкой следует не включенный в длину пробел. Программа может изменять символы в пределах строки. Примечание: Требование, о следовании пробела за строкой устаревшее и включено как уступка существующим программам, которые используют CONVERT. Программа не должна зависеть от существования пробела. См.: 3.3.3.6 Другие временные области, 3.4.1 Синтаксический анализ. A.6.1.2450 WORD Типичное использование: char WORD ccc<char>
История
Слово WORD появилось в 1958 году в самой первой версии интерпретатора Форта, написанного Чак Муром на Фортране для IBM EDPM 704 для САО. Тогда оно ещё не называлось WORD, так как в то время команды Форта кодировались числами.
Важно, что первый WORD считывал для INTERPRET слова, разделённые пробелами. Подобный ввод в свободном формате был необычен для того времени, но более эффективным (компактней и быстрее) и надёжным. Фортрановский ввод был отформатирован в конкретные колонки и ошибки набора приводили к многочисленным задержкам.
Чак Мур отказался от слова WORD в colorForth, где вводимые слова не буферизуются в редактируемой строке, а исполняются сразу по нажатию клавиши «Пробел».
WORD в предыдущем стандарте Forth-83 (англ.)
WORD char -- addr M,83 Generates a counted string by non-destructively accepting characters from the input stream until the delimiting character char is encountered or the input stream is exhausted. Leading delimiters are ignored. The entire character string is stored in memory beginning at addr as a sequence of bytes. The string is followed by a blank which is not included in the count. The first byte of the string is the number of characters {0..255}. If the string is longer than 255 characters, the count is unspecified. If the input stream is already exhausted as WORD is called, then a zero length character string will result. If the delimiter is not found the value of >IN is the size of the input stream. If the delimiter is found >IN is adjusted to indicate the offset to the character following the delimiter. #TIB is unmodified. The counted string returned by WORD may reside in the "free" dictionary area at HERE or above. Note that the text interpreter may also use this area. See: "input stream"
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 в ядре ФОРТ-ЕС:
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! ;
Определение слова WORD в FORTH ИТЭФ:
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
Ссылки
- Исходный текст слова WORD в Каллисто Классик 1.0
- Слово WORD и комментарий к нему в стандарте ANS Forth (англ.)
- Слово WORD и комментарий к нему в черновике Forth 200x (англ.)
- «The word WORD is an anathema, it shouldn't exist.» (англ.) — одно из первых сообщений Чака Мура о colorForth (26 июля 1997 года)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- I/O and You в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |