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


Глава 11. Создание слов-определителей - часть 8


При исполнении 1K вначале в стек кладется адрес содержимого 1K (потому что слово CREATE помещает код стадии исполнения в 1K, чтобы работать таким образом) и после этого @ извлекает содержимое из этого адреса, помещая в стек число 1024. Другими словами, оператор @, следующий после DOES>, исполняется тогда, когда слово-ребенок исполняется, а не тогда, когда оно определяется.

Определение слова CONSTANT является отличным примером создания новых определяющих слов. Слова, которые находятся между CREATE и DOES>, исполняются на второй стадии, т.е. тогда, когда исполняется слово-родитель и компилируется слово-ребенок. Когда исполняется само слово-ребенок, то вначале оно помещает в стек адрес его содержимого, а потом исполняются слова, которые находятся в определяемом слове после DOES>, описывающие, что должно делать слово-ребенок,

Приведем пример использования определяющих слов, с которыми мы вновь встретимся в гл. 12 и 13, когда будем обсуждать разработку программы-редактора. Как вы уже знаете, многие терминалы и принтеры управляются кодами ASCII со значениями 0 - 31 (их называют управляющими). Значения управляющих кодов должны быть записаны в константах и выводиться на терминал словом EMIT, но лучше для этого определить специальное слово IS-CONTROL - это не что иное, как CONSTANT, в которое добавлено слово EMIT, описывающее поведение слова IS-CONTROL при исполнении. Слово IS-CONTROL. можно использовать для создания целого семейства родственных слов, например: 7 IS-CONTROL BELL (эвуковой_сигнал) 8 IS-CONTROL BACKSPACE (возврат_влево) 12 IS-CONTROL FORMFEED (подача_страницы) 13 IS-CONTROL CR (возврат_каретки) где каждое слово будет задавать терминалу определенное действие. Одно из достоинств определяющих слов уже очевидно: они способствуют улучшению читабельности программ. Например, при использовании слова IS-CONTROL нужно только конкретизировать данные, которыми отличается новое слово от других слов-детей, порождаемых словом IS-CONTROL, а именно управляющим кодом и именем.


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