ПОИСК ПО СЛОВАРЮ
В первой главе было показано, как текстовый интерпретатор 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 |