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


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


Слово CREATE дает само по себе наиболее общий способ определения новых слов в Форте. Как мы уже видели в гл.6, слово CREATE используется в форме CREATE CHILD-WORD где CHILD-WORD - это определяемое слово. Напомним вкратце: действие CREATE состоит в том, что оно помещает в словарь заголовок для слова CHILD-WORD, а когда это слово исполняется, то в стек кладется адрес его содержимого. Слово CREATE не резервирует никакого пространства после заголовка определяемого слова; резервирование места выполняется отдельной операцией, обычно словами С,, , (запятая) или ALLOT. Вы знаете также, что определение : VARIABLE CREATE 0 , ; создает VARIABLE как определяющее слово, которое может использоваться для определения произвольного числа переменных, каждая из которых оказывается инициализирована нулем. Определение слова VARIABLE является действием первой стадии. Действие второй стадии происходит, когда мы используем слово так, как, например, в данном случае: VARIABLE DISCOUNT Ее можно разложить на отдельные события: VARIABLE Начинает исполнение определяющего слова CREATE Делает имя "DISCOUNT" словом в словаре Запоминает адрес кода стадии исполнения в DISCOUNT 0 , Компилирует в DISCOUNT два байта нулей

Действие VARIABLE на третьей стадии происходит тогда, когда исполняется слово DISCOUNT, т.е. когда исполняется код стадии исполнения, который был записан в содержимое DISCOUNT словом CREATE, при этом в стек помещается адрес содержимого DISCOUNT.

Любое слово, определенное через двоеточие, которое содержит как часть своего определения слово CREATE, является новым определяющим словом. Как можно было бы определить CONSTANT ? Казалось бы, это можно сделать следующим образом: : BAD-CONSTANT CREATE , @ ; (Плохая_константа) но мы сразу же замечаем, что слово BAD-CONSTANT работать не может, так как операция @ будет совершаться на второй стадии, когда создается слово-ребенок, а не тогда, когда это слово должно исполняться. В действительности нам нужно определить слово CONSTANT так, чтобы содержимое слова-ребенка извлекалось на третьей стадии.


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