Способ мышления-Форт


Глава 4. Детализированная разработка/решение задачи - часть 15


При использовании внутри определения он будет искать слово, следующее за СВЕТЛО - например, СИНИЙ - и передавать этот адрес слову EXECUTE, которое исполняет СИНИЙ, при этом на стеке остается число 1. "Отработав" оператор СИНИЙ, СВЕТЛО теперь делает "ИЛИ" с числом 8, получая 9.)

Это определение будет работать при вызове из входного потока, но понадобятся специальные меры, если мы захотим использовать СВЕТЛО внутри другого определения, как например:

: РЕДАКТИРОВАНИЕ СВЕТЛО СИНИЙ БОРДЮР ;

Даже при работе со входным потоком использование EXECUTE приведет к катастрофе, если после СВЕТЛО случайно будет указано что-нибудь, отличное от нужного определенного слова.

Предпочтительный подход заключается в том, что, если мы вынуждены использовать именно такой синтаксис, то СВЕТЛО должно устанавливать флаг для СИНИЙ, а СИНИЙ должен определять наличие такого флага; это мы позже еще будем рассматривать.

Случается, что заглядывание вперед по входному потоку желательно, даже обязательно. (Предлагаемое далее слово TO часто реализуется именно так [3].)

Но, в общем случае, опасайтесь упреждающих заглядываний. Вам иначе придется готовиться к разочарованиям.

------------------------------------------------------------ СОВЕТ Пусть команды исполняют сами себя. ------------------------------------------------------------

Это правило соотносится с предыдущим. Позволять словам самим делать свою работу - это один из философских кульбитов Форта. Свидетельство тому - компилятор Форта (функция, компилирующая определения через двоеточие), карикатура на который представлена на рисунке 4-7. В нем всего несколько правил:

Брать следующее слово во входном потоке и искать его в словаре.

Если это обычное слово, `компилировать` его адрес.

Если это слово "немедленного исполнения", `исполнить` его.

Если это слово не определено, попытаться преобразовать его в цифру и скомпилировать как литерал.

Если это не число, выполнить аварийный выход с сообщением об ошибке.




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