Язык программирования Форт


Глава 10. Хранение программ и данных - часть 21


Затем определите следующее слово: : PARSE ( блок# -- ) (Разбор) BLK @ >R >IN @ >R (Запоминает прежние указатели) BLK ! 0 >IN ! (Готово для раэбора нового блока) BEGIN 32 WORD (Начало раэбора) COUNT ?DUP WHILE TYPE SPACE (Печатает, пока находит) REPEAT DROP R> >IN ! R> BLK ! ; (Восстанавливает указатели) Теперь если ввести 50 PARSE то вы увидите на экране The (Выделенные quick при brown разборе fox слова)

Вместо того чтобы разделять слова во входном буфере с помощью слова PARSIT из гл. 9, вы можете разделять их непосредственно в блочном буфере словом PARSE, присваивая соответствующие значения переменным BLK и >IN. Описанный прием извлечения строк из блоков является довольно эффективным для работы как со строковыми, так и с числовыми данными, запоминаемыми в форме кодов ASCII. В этом вы убедитесь, сделав несколько упражнений.

Упражнения

1. Определите слово BLOCKWORD, которое должно выделять только одно слово из блока, запоминать его в счетной строке с адресом PAD и выдавать в стек адрес PAD, В стеке должен находиться номер блока, смещение начального байта в блоке и код разделителя. Таким образом, если вы введете 50 8 32 BLOCKWORD COUNT TYPE то в PAD будет занесена счетная строка, начинающаяся с восьмого байта и завершающаяся пробелом. После этого выделенное слово будет выведено на экран. 2. Определите переменную под именем POSITION для задания смещения байта, с которого должно начинаться разделение слов. После этого дайте новое определение слова BLOCKWORD под именем BWORD. которое должно производить разбор слов, начиная с позиции, записанной в переменную POSITION. Таким образом, если ввести 8 POSITION ! 50 32 BLOCKWORD COUNT TYPE то действие должно быть таким же, как в упражнении 1, Кроме того, новое определение BLOCKWORD должно изменять значение переменной POSITION так, чтобы оно указывало на следующую после разделителя позицию выделяемого слова. Таким образом, если несколько раз подряд исполнить 50 32 BLOCKWORD COUNT TYPE то на экран будут выведены все слова из блока. 3.


- Начало -  - Назад -  - Вперед -