в том, что оно не
Другая особенность слова
WORD состоит в том, что оно не воспринимает начальные вхождения символа-ограничителя. Если
в начале некоторого фрагмента набраны пробелы или если слова разделены пробелами, то выражение BL
WORD осуществляет поиск до первого значащего символа и считывает фрагмент до первого пробела. Помещаются во временный буфер и учитываются в счетчике только значащие символы. Указанная особенность может вызывать затруднения при работе со словом
WORD. Например, в гл. 3 было введено слово
.(, обеспечивающее непосредственный вывод на экран очередного фрагмента из входного потока до правой круглой скобки. Это слово может быть определено следующим образом:: .( \ текст) ( -- ) ASCII ) WORD COUNT TYPE ;
Комментарий означает, что в данном определении фрагмент будет считываться до правой круглой скобки «)». Но в таком определении не предусмотрена ситуация с пустой строкой (без символов): .() CR CR
Наше определение не воспримет правую круглую скобку, поскольку она является первым просматриваемым символом, а посчитает фрагмент CR CR за строку, которая должна быть выведена на экран. Для подобных ситуаций в ряде Форт-систем имеется слово
PARSE (РАЗБОР), функционирующее аналогично слову
WORD, но воспринимающее начальные вхождения символа-ограничителя. Помните, что
PARSE оставляет в вершине стека адрес строки и значение счетчика, а не адрес строки со счетчиком, как это делает
WORD.
Ниже приводится слово, которым вы можете воспользоваться: : TEXT ( с) PAD 80 BLANK WORD COUNT PAD SWAP CMOVE> ;
Подобно
WORD, слово
TEXT выбирает из стека символ-ограничитель и сканирует входной поток до тех пор, пока из него не будет считан фрагмент, ограниченный этим символом. Затем фрагмент помещается в рабочую область (PAD). Отличительной чертой
TEXT является то, что рабочая область перед занесением строки" заполняется пробелами, что облегчает выполнение слов
TYPE и
-TRALLING.
WORD
|
( с -- а)
|
Чтение слова, ограниченного заданным символом, из входного потока. Полученный фрагмент оформляется в виде строки со счетчиком и ее адрес помещается в стек.
|
COUNT
|
( a -- a+1 #)
|
Преобразование адреса строки со счетчиком (длина которой находится в первом строки) в формат, соответствующий использования словом TYPE а именно: в стек заносится адрес начала текста строки и ее длина.
|
Содержание Назад Вперед