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


ЧТО ТАКОЕ КОМПИЛИРУЮЩЕЕ СЛОВО? - часть 2


Чтобы понять, как он действует, изучим компилятор двоеточия.

Компилятор двоеточия функционирует аналогично текстовому интерпретатору. Он выбирает из входного потока слова и пытается отыскать их в словаре. Однако, вместо того чтобы (как ИНТЕРПРЕТАТОР) исполнять эти слова немедленно, он, как правило, компилирует их адреса в словарь. Но компилятор распознает компилирующие слова и только их исполняет сразу, подобно текстовому интерпретатору.

Каким образом компилятор двоеточия отличает компилирующие слова? По биту немедленного исполнения данного определения (гл. 9 «Структура словарной статьи»): если бит сброшен, то компилируется адрес слова, если установлен, что слово немедленно исполняется. Такие слова называются словами немедленного исполнения (immediate).

Слово IMMEDIATE делает слово немедленно исполняемым. Его формат: : имя определение ; IMMEDIATE

т. е. это слово выполняется сразу после компиляции определения. Допустим, у нас есть определение: : ТЕСТ ; IMMEDIATE

Это слово немедленного исполнения которое ничего не выполняет. Если мы обратимся к нему из определения другого слова, например: : 2CRS CR ТЕСТ CR ;

то будет скомпилирован следующий фрагмент словаря:

Как видите, определение скомпилировано без слова ТЕСТ. На самом деле оно выполнено во время компиляции слова 2CRS. Поскольку слово ТЕСТ ничего не выполняет, оно бесполезно. Приведем другой пример. Предположим, что у нас есть слово с именем ТЮЛЬПАН и определение: : ТЕСТ COMPILE ТЮЛЬПАН ; IMMEDIATE

Теперь переопределим слово 2CRS точно так же, как и ранее: : 2CRS CR ТЕСТ CR ;

и получим следующий результат:

На сей раз слово ТЕСТ во время компиляции определения 2CRS скомпилировало адрес слова ТЮЛЬПАН. На самом деле мы нашим определением как бы сказали: : 2CRS CR ТЮЛЬПАН CR ;

и что компилировать, а что нет, определяет ТЕСТ, потому что это слово немедленного исполнения.

Обратите внимание на слово COMPILE (КОМПИЛЯЦИЯ). Мы ввели его как бы между прочим, поскольку его функции проще понять в контексте.



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