Начальный курс программирования на языке Форт


ПОИСК ПО СЛОВАРЮ


В первой главе было показано, как текстовый интерпретатор INTERPRET выбирает слова из входного потока и ищет их определения в нашем словаре. Если он находит слово, то исполняет его.

Посмотрим, из каких компонентов состоит текстовый интерпретатор, начнем с изучения слов поиска по словарю. Слово ' (апостроф) находит определение в словаре и помещает в стек адрес этого определения. Воспользуемся словом ВСТРЕЧА, которое мы определили в гл. 1, и запишем:

' ВСТРЕЧА U. 25520 ok

В результате получим адрес слова ВСТРЕЧА (вот и все, что должно произойти).

(На самом деле и INTERPRET, и апостроф используют для поиска по словарю примитив с именем FIND (ПОИСК).)

Слово ' имеет несколько применений. Так, с помощью выражения: ' ВСТРЕЧА, вы можете узнать, было ли слово ВСТРЕЧА определено, фактически не выполняя его (при выполнении этого выражения будет либо напечатан адрес, либо выдан ответ: «?»).

Вам также может понадобиться адрес для того, чтобы вывести с помощью DUMP содержимое определения, например: ' ВСТРЕЧА 12 DUMP

Можно сочетать апостроф со словом EXECUTE. Вспомните, что текстовый интерпретатор, найдя слово, передает его адрес слову EXECUTE. To же самое можете делать и вы. Слово EXECUTE выполняет определение, адрес которого задается в стеке. Таким образом, вы можете ввести (следуя Стандарту-83): ' ВСТРЕЧА EXECUTE Привет я говорю на Форте ok

и получить тот же эффект, что и при выполнении одного слова ВСТРЕЧА, только более изощренным способом.

Слово EXECUTE не проверяет, является ли заданный адрес правильным. Вся ответственность ложится на вас. Неверный адрес почти всегда приводит к разрушению системы. Стандартом-83 определено, что апостроф оставляет в вершине стека правильный адрес для EXECUTE. К сожалению, интерфейс между апострофом и EXECUTE менялся от диалекта к диалекту на протяжении многих лет.

В приведенной ниже таблице излагаются правила вычисления адреса слова для EXECUTE. В первом столбце даются примеры использования апострофа в режиме интерпретации (что было продемонстрировано выше). Например, на фиг-Форте вы можете ввести: ' ВСТРЕЧА CFA EXECUTE

Пояснения к остальным столбцам - более краткие.

1. Получение адреса для EXECUTE в режиме интерпретации 2. Получение адреса для EXECUTE из входного потока (внутри определения) 3. Получение адреса следующего слова внутри определения для передачи EXECUTE Что помещает апостроф в стек
Фиг-Форт ' имя CFA [COMPILE] ' CFA ' имя CFA pfa
MMS-Форт ' имя 2 - [COMPILE] ' 2- ' имя 2- pfa
Стандарт-79 ' имя CFA или FIND имя [COMPILE] ' CFA ' имя CFA pfa
полиФорт ' имя ' ['] имя pfa
Стандарт-83 ' имя ' ['] имя cfa




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