СЛОВАРЬ
Каждое слово (его имя и определение) заносится в так называемый словарь Форта. Этот словарь, когда вы начинаете писать на Форте, уже содержит какое-то количество слов, но вы можете помещать в него и «свои» слова. При определении нового слова оно переводится в словарную форму и добавляется в словарь. Такой процесс называется компиляцией.
К примеру, если вы вводите строку : STAR 42 ЕМIТ ;<return>
компилятор компилирует новое определение в словарь. Сам компилятор не выдает на печать звездочку.
(Не хотите ли вы уже сейчас посмотреть список слов, находящихся в словаре? В большинстве систем для этого нужно ввести слово WORDS, и тогда вы получите на экране имена слов вместе с их «адресами» (ссылками на участки памяти). Слова перечислятся в том порядке, в котором их определили — последнее определенное слово будет верхним. В некоторых, более старых системах для таких целей существует слово VLIST.)
Теперь слово STAR находится в словаре. А как выполняется слово, находящееся в словаре? Наберите непосредственно (не внутри определения) следующую строку: STAR 30 SPACES<return>
Эта строка активирует слово с именем INTERPRET, означающее «текстовый интерпретатор».
Текстовый интерпретатор просматривает входной поток символов в поисках строки символов, внутри которой нет пробелов. Если он находит такую строку, то он ищет ее в словаре.
Найдя нужное слово в словаре, интерпретатор передает его определение слову с именем EXECUTE1, которое выполняет это определение (в нашем случае оно инициирует печать звездочки). Интерпретатор вновь выдает вам ok.
1 Слово EXECUTE (ВЫПОЛНИТЬ) в одном из вариантов переводится как «казнить». Отсюда ассоциации с палачом. — Примеч. пер.
Если интерпретатор не находит такой строки в словаре, он обращается к обработчику чисел (NUMBER). Последний проверяет, не является ли переданная ему информация числом, и если это действительно так, помещает его в участок памяти, отведенный для чисел.
Что произойдет, если вы попытаетесь выполнить слово, которого нет в словаре? Введите следующую фразу: XLERB<return> XLERB ?
Не найдя слово XLERB в словаре, текстовый интерпретатор попытается передать его NUMBER, который не признает его, после чего интерпретатор вернет вам это слово со знаком вопроса.
Итак, когда вы набираете на терминале предварительно определенное слово, оно интерпретируется и затем выполняется.
Упоминали ли мы о том, что символ «:» является словом? Так, если вы вводите этот символ: : STAR 42 EMIT ;<return>
происходит следующее:
текстовый интерпретатор находит двоеточие во входном потоке и передает его EXECUTE.
EXECUTE предлагает начать компиляцию. Компилятор переводит определение в словарную форму и записывает его в словарь.
Дойдя до точки с запятой, компилятор останавливается и снова начинает выполняться текстовый интерпретатор, который выдает на экран ok.