Язык Форт и его реализации



         

Управление поиском слов - часть 3


Определение слова VOCABULARY с учетом перечисленных соглашений может выглядеть так:

: VOCABULARY ( ---> ) CREATE 256 BL + , CONTEXT @ 2- , HERE VOC-LINK @ , VOC-LINK ! DOES> ( A ---> ) 2+ CONTEXT ! ;

Когда в список включается новая словарная статья, то в поле связи ее заголовка копируется значение из поля связи фиктивной статьи в поле параметров данного списка, а туда заносится адрес нового заголовка. Таким образом, можно определить слово LATEST (последний):

: LATEST ( ---> NFA ) CURRENT @ @ ;

которое возвращает адрес заголовка последней созданной словарной статьи (обычно это адрес поля имени). Через это слово становится очевидной, например, реализация слова IMMEDIATE:

: IMMEDIATE ( ---> ) LATEST C@ 128 OR LATEST С! ;

которое устанавливает в единицу признак немедленного исполнения в байте-счетчике последней созданной словарной статьи.

В соответствии с общими принципами языка Форт сам процесс поиска слова в словаре доступен программисту. Стандарт предусматривает для этого следующие слова:

' ---> CFA ['] ---> CFA (испонение) [COMPILE] ---> (КОМПИЛЯЦИЯ) FIND A ---> CFA,N / A,0

Слово ' (апостроф, читается «штрих») вводит очередное слово и ищет его в словаре, возвращая адрес поля кода найденной статьи (если слово не найдено, то это считается ошибкой).

Слово ['] имеет признак немедленного исполнения и используется внутри определений через двоеточие, образуя вместе со следующим словом единую пару: во время исполнения адрес поля кода этого слова будет положен на стек данных.

Слово [COMPILE], уже встретившееся ранее, вводит и компилирует следующее слово независимо от признака немедленного исполнения.

Наконец, слово FIND (найти) позволяет формировать образец для поиска программным путем: его параметром является адрес строки со счетчиком, которая рассматривается как имя слова. В случае успеха FIND возвращает адрес поля кода его словарной статьи и значение N, характеризующее признак немедленного исполнения: 1, если признак установлен, и -1, если отсутствует.


Содержание  Назад  Вперед